将2个参数转换为另一种方法

时间:2014-03-25 16:15:48

标签: ruby-on-rails ruby

我用不同的方法解释了几个字符串,但它们都以相同的格式返回两个值。我想将这两个值直接传递给另一个方法。这可能吗?我一直收到错误"Expecting 2 params, got 1"

def step1 (text)
  return "test1", "test2"
end

def step2 (val1, val2)
   do stuff...
end

step2 (step1 "this is a string")

2 个答案:

答案 0 :(得分:3)

使用*进行解构,选项:

step2(*step1("this is a string")) # Note required parens around step1 param

像这样返回多个参数是语法糖;你实际上是在返回一个数组。

如果您正在尝试构建DSL,则可能需要考虑采用不同的方式。

如果您只是在处理非DSL-ish API,我可能会更改方法签名并对step1内的数组进行解构,例如val1, val2 = arg1并跳过一些复杂性

答案 1 :(得分:0)

您收到此错误是因为您传递的是单个参数,您可以按以下方式执行此操作:

def step1 (text)
  return "step 1 called.."
end

def step2 (val1, val2)
   return "step 2 called.."
end

step2(method(:step1),"this is a string")