Ruby:块中的yield块?

时间:2009-10-21 16:46:55

标签: ruby lambda

红宝石中的lambdaprocmethod或其他类型的块是否可以屈服于另一个块?
类似......

a = lambda {
  puts 'in a'
  yield if block_given?
}

a.call { puts "in a's block" }

这不起作用......它只是产生

in a
=> nil

有没有办法让块调用块?

2 个答案:

答案 0 :(得分:8)

你可以调用块,这类似于屈服。

a = lambda {|&block| block.call if block}
a.call {print "hello"}

请注意

a.call

不会返回错误。

答案 1 :(得分:8)

我不确定你是否能做到这一点,但类似的东西会是:

在Ruby 1.8.6中:

a = lambda { |my_proc|
  puts 'in a'
  my_proc.call
}

a.call(lambda { puts "in a's block" })

在Ruby 1.9.1中,您可以使用块参数

a = lambda { |&block|
  puts 'in a'
  block.call
}

a.call { puts "in a's block" }