如何在1种方法中产生2个块

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)

有什么建议在哪里,哪些是错的?谢谢

saw*_*awa 9

您不能在方法中产生两个块.

但你可以采取两个触发器.

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)


Jör*_*tag 9

块是将单个匿名过程传递给方法的轻量级方法.因此,根据定义,不能将两个块传递给方法.它不仅在语义上是不可能的,甚至在语法上也是不可能的.

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)