在ruby中可以& block是可选的吗?

时间:2015-03-20 16:52:24

标签: ruby

这可能吗?例如,如果我有:

module Sample
  def self.method_name(var, &block)
    if var == 6
      call_other_method(var, &block)
    else
      call_other_method(var)
    end
  end

  def self.call_other_method(var, &block)
    # do something with var and block, assuming block is passed to us.
  end
end

因此,在上面的示例中,如果您调用Sample.method_name并将其传递给3和块,则不会使用该块,因为输入与条件不匹配。 但这可能吗?你可以选择&block吗?

我做了一个假设,基于其他堆栈问题,您可以将&block从一个方法传递到下一个方法,如上所示,如果这是错误的请填写我。 < / p>

2 个答案:

答案 0 :(得分:8)

不确定。查看ruby文档中的block_given?

http://ruby-doc.org/core-2.2.1/Kernel.html#method-i-block_given-3F

module Sample
  def self.method_name(var, &block)
    if var == 6
      call_other_method(var, &block)
    else
      call_other_method(var)
    end
  end

  def self.call_other_method(var, &block)
    puts "calling other method with var = #{var}"
    block.call if block_given?
    puts "finished other method with var = #{var}"
  end
end

运行时输出为:

calling other method with var = 6
this is my block
finished other method with var = 6
calling other method with var = 3
finished other method with var = 3

答案 1 :(得分:2)

是的,有可能。实际上,您发布的代码已经正常运行。