1

如评论中所述,问题实际上就是答案。

如果该方法得到一个块,我想进一步使用它。但我也有一个不需要该块的变体。我可以以任何方式做到这一点吗?

例如:

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
4

1 回答 1

1

使用内核#block_given?

您可能正在寻找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
于 2020-07-08T14:01:31.423 回答