在Ruby中是否可以将多个块传递给一个方法?

在Ruby中是否可以将多个块传递给一个方法?,ruby,block,codeblocks,Ruby,Block,Codeblocks,比如: def foo(&b1, &b2) b1.call b2.call end foo() { puts "one" } { puts "two" } 不能以这种方式传递多个块,但可以传递多个或lambda对象: irb(main):005:0> def foo(b1, b2) irb(main):006:1> b1.call irb(main):007:1> b2.call irb(main):008:1> end => n

比如:

def foo(&b1, &b2)
  b1.call
  b2.call
end

foo() { puts "one" } { puts "two" }

不能以这种方式传递多个块,但可以传递多个或
lambda
对象:

irb(main):005:0> def foo(b1, b2)
irb(main):006:1>   b1.call
irb(main):007:1>   b2.call
irb(main):008:1> end
=> nil
irb(main):009:0> foo(Proc.new {puts 'one'}, Proc.new {puts 'two'})
one
two
=> nil
irb(main):010:0>

Ruby 1.9中的语法更可爱:

foo ->{puts :one}, ->{puts :two}

好的,我明白了。我想我也可以用lambda{puts“bla”}。我想底线是,我在方法定义中最多只能使用&block一次。谢谢。注意这将替换
foo(Proc.new{put'one'},Proc.new{put'two'})
在中,您仍然需要将函数定义为
foo(b1,b2)
,而不是
foo(&b1,&b2)