Ruby Block to Array

时间:2013-03-03 03:15:20

标签: ruby lambda block proc

我正在尝试在方法中获取块参数,并转换内容(符号数组)并将其转换为数组。例如:

def sequence(&block)
  # ?
end

sequence do
  :foo,
  :bar,
  :foobar
end # => [:foo, :bar, :foobar]

我知道在sequence方法中将数组作为参数会更容易,但我试图与另一种方法保持一致。

3 个答案:

答案 0 :(得分:3)

Ruby中不允许使用这种语法,所以不幸的是,这是不可能的,因为代码甚至不会通过解析器。

答案 1 :(得分:0)

好的,没有回答确切的问题,我想你和dirk知道这一点,但......

如果有人想要Array作为参数并且他们的搜索引导他们在这里,Ruby确实有一个基本的功能,可以为你做类似的事情:

def f *x
  x
end

p f :foo,
    :bar,
    :foobar 

# => [:foo, :bar, :foobar]

答案 2 :(得分:0)

虽然你建议的语法不会通过解析器,但有一些调整:

def sequence(&block)
  yield
end

sequence do [
  :foo,
  :bar,
  :foobar
] end # => [:foo, :bar, :foobar]

sequence do _= 
  :foo,
  :bar,
  :foobar
end # => [:foo, :bar, :foobar]