Ruby:块中的yield块?

Der*_*ley 10 ruby lambda

是否有可能为一lambda,proc,method或其他类型的宝石块,以获得到另一个块?
就像是...

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

a.call { puts "in a's block" }
Run Code Online (Sandbox Code Playgroud)

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

in a
=> nil
Run Code Online (Sandbox Code Playgroud)

有没有办法让块调用一个块?

jrh*_*cks 8

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

a = lambda {|&block| block.call if block}
a.call {print "hello"}
Run Code Online (Sandbox Code Playgroud)

注意

a.call
Run Code Online (Sandbox Code Playgroud)

不会返回错误.


ott*_*bar 8

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

在Ruby 1.8.6中:

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

a.call(lambda { puts "in a's block" })
Run Code Online (Sandbox Code Playgroud)

在Ruby 1.9.1中,您可以拥有块参数

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

a.call { puts "in a's block" }
Run Code Online (Sandbox Code Playgroud)