【问题标题】:Ruby: yield block from a block?Ruby:从块中产生块?
【发布时间】:2010-12-08 19:04:22
【问题描述】:

lambdaprocmethod 或 ruby​​ 中的其他类型的块是否可以让位于另一个块?
类似...

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

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

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

in a
=> nil

有没有办法让块调用块?

【问题讨论】:

  • 这在 Ruby 2.7 中仍然是不可能的...有谁知道,如果 Ruby 3 将支持这样的语法?

标签: ruby lambda


【解决方案1】:

可以调用block,类似于yield。

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

注意

a.call

不会返回错误。

【讨论】:

  • 这不是什么大问题,但我注意到你是第一个回答的。
【解决方案2】:

我不确定你是否可以这样做,但类似的事情是:

在 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" }

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2012-03-29
    • 2011-03-05
    • 2014-08-01
    • 2017-09-23
    • 2018-08-07
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多