我不知道任何Ruby,现在正在阅读一些文档。 在阅读有关使用代码块和“yield”关键字之后我怀疑是否可以将多个代码块传递给函数,并且在被调用函数中随意使用这两个代码块。
答案 0 :(得分:9)
您一次只能传递一个块,但块实际上是Proc
个实例,您可以传递任意数量的实例作为参数。
def mymethod(proc1, proc2, &block)
proc1.call
yield if block_given?
proc2.call
end
mymethod(Proc.new {}, Proc.new {}) do
# ...
end
然而,它很少有意义。
答案 1 :(得分:1)
从语法上讲,使用yield
语句只支持一个传递给函数的代码块。
当然,您可以传递一个函数多个其他函数或“代码块对象”(Proc
个对象),并使用它们,但不能只使用yield
。
答案 2 :(得分:1)
您可以创建Proc
个对象并传递任意数量的对象。
我建议阅读this page以了解Ruby所具有的所有不同块和闭包构造的细微之处。
答案 3 :(得分:1)
您可以使用call
方法而不是yield来处理传入的两个单独的块。
以下是:
def mood(state, happy, sad )
if (state== :happy)
happy.call
else
sad.call
end
end
mood(:happy, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
mood(:sad, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
您可以传递args,例如:
happy.call('very much')
参数就像你在块中所期望的那样工作:
Proc.new {|amount| puts "yay #{amount} !"}