有没有更好的方法可以在没有传递阻止时阻止'收益'?

Tao*_*Tao 38 ruby yield block

我有一个产生的方法,看起来像:

def a_method(*params)
  # do something
  yield
  # do something else
end
Run Code Online (Sandbox Code Playgroud)

如果传入一个块,我希望这个方法产生块; 并且如果没有传入块,该方法应该轻易地跳过yield sentense而不会崩溃,例如:

 no block given (yield) (LocalJumpError)
Run Code Online (Sandbox Code Playgroud)

当然,最直接的方法是将方法更改为:

def a_method(*params, &block)
  # do something
  yield if block
  # do something else
end
Run Code Online (Sandbox Code Playgroud)

但是不是更漂亮的方式吗?

Mat*_*chu 72

是! :)

def a_method(*params)
  # ...
  yield if block_given?
  # ...
end
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它也比捕获块(使用`&block`)更快. (7认同)