And*_*ius 4 ruby methods yield proc
如何在同一方法中产生两个不同的块
示例代码:
def by_two(n,a)
yield n
yield a
end
proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}
by_two(10, 300, &proc1, &proc2)
Run Code Online (Sandbox Code Playgroud)
错误是这样的 -
main.rb:7: syntax error, unexpected ',', expecting ')'
by_two(10, 300, &proc1, &proc2)
Run Code Online (Sandbox Code Playgroud)
有什么建议在哪里,哪些是错的?谢谢
您不能在方法中产生两个块.
但你可以采取两个触发器.
def by_two(n, a, pr1, pr2)
pr1.call(n)
pr2.call(a)
end
by_two(10, 300, proc1, proc2)
Run Code Online (Sandbox Code Playgroud)
块是将单个匿名过程传递给方法的轻量级方法.因此,根据定义,不能将两个块传递给方法.它不仅在语义上是不可能的,甚至在语法上也是不可能的.
Ruby 确实支持Procs 形式的一流程序,因为它们只是像任何其他对象一样的对象,你可以根据需要传递它们中的任意数量:
def by_two(n, a, proc1, proc2)
proc1.(n)
proc2.(a)
end
proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}
by_two(10, 300, proc1, proc2)
# 20
# => 400
Run Code Online (Sandbox Code Playgroud)
自从Ruby 1.9中引入lambda文字以来,Procs几乎与块一样轻量级,因此不再有太大的区别:
by_two(10, 300, -> x { p x * 2 }, -> x { x + 100 })
# 20
# => 400
Run Code Online (Sandbox Code Playgroud)