如果方法内部有收益但是没有传递给它的块怎么办?

时间:2015-12-04 19:38:55

标签: ruby block yield

如果您使用具有yield的方法而不将块传递给它会发生什么?

class SomeClass < Array
    def some_method
        yield(self[i])
    end
end

a = SomeClass.new
a.some_method

有没有办法设置默认行为:如果没有给出其他方法,请给方法默认块运行?

1 个答案:

答案 0 :(得分:4)

您可以使用Kernel#block_given?来确定是否传递了一个块并采取相应的操作。

class SomeClass < Array
  def some_method
    if block_given?
      yield(self[i])
    else
      # not given
    end
  end
end

这意味着如果未传递阻止,您也可以使用默认操作。