【问题标题】:Ruby block - return yield running code after yieldRuby 块 - 在 yield 之后返回 yield 运行代码
【发布时间】:2018-01-10 20:00:38
【问题描述】:

我想返回yield的输出,还要执行yield之后的代码,有没有更“正确”的方式?:

def myblock
  yield_output = yield
  puts 'after yield'
  yield_output
end

myblock {'my yield'}
# after yield
#  => my yield

【问题讨论】:

    标签: ruby yield ruby-block


    【解决方案1】:

    你可以使用tap:

    def myblock
      yield.tap { puts 'after yield' }
    end
    
    myblock { 'my yield' }
    # after yield
    #=> my yield
    

    【讨论】:

    • 谢谢你认为会有更优雅的红宝石
    • 只是输入...如果你想产生一个参数(yield 5).tap { puts 'after yield' },你可以使用括号。
    • @SimpleLime 虽然yield 不是一种方法,但我会将括号括在参数周围,即yield(5).tap { ... },但无论哪种方式都有效。
    • @joshweir 如果您需要代码中的结果 ('my yield'):tap 将接收器传递给块,因此您可以编写 yield.tap { |result| ... }
    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 2015-03-26
    • 2011-09-18
    • 2017-10-26
    • 2018-01-26
    • 2021-07-29
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多