如评论中所述,问题实际上就是答案。
如果该方法得到一个块,我想进一步使用它。但我也有一个不需要该块的变体。我可以以任何方式做到这一点吗?
例如:
def maybe_gets_block(&blk)
if blk
STDERR.puts "Yay! I’ve got a block!"
@callback = blk
else
STDERR.puts "I don’t have a block"
@callback = nil
end
end
如评论中所述,问题实际上就是答案。
如果该方法得到一个块,我想进一步使用它。但我也有一个不需要该块的变体。我可以以任何方式做到这一点吗?
例如:
def maybe_gets_block(&blk)
if blk
STDERR.puts "Yay! I’ve got a block!"
@callback = blk
else
STDERR.puts "I don’t have a block"
@callback = nil
end
end
您可能正在寻找Kernel#block_given?. 通常,您会将它与Object#yield结合使用。例如,这是一个片段,它将作用于一个可选的块或 proc,然后再退回到其他一些动作。
def maybe_gets_block prc=nil
if block_given?
yield
elsif prc.is_a? Proc
prc.call
else
# do something else
end
end