只有在给出块时才传递块的替代方法是什么?

ped*_*ath 0 ruby

或者简单地说,这个代码怎么能用较少重复的版本编写?或者更有效率?

if block_given?
  render(*options, &block)
else
  render(*options)
end
Run Code Online (Sandbox Code Playgroud)

Ser*_*sev 5

使用块参数.它处理两种情况.

def foo(*options, &block)
  bar(*options, &block)
end
Run Code Online (Sandbox Code Playgroud)

例:

def bar(*options)
  p options
  p yield if block_given?
end

foo(1)
# >> [1]

foo(2) { 'hello' }
# >> [2]
# >> "hello"
Run Code Online (Sandbox Code Playgroud)