如果方法内部有 yield,但没有传递块怎么办?

What if method has yield inside, but a block wasn't passed to it?

如果你使用一个有 yield 的方法,但没有向它传递一个块,会发生什么?

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

a = SomeClass.new
a.some_method

有没有办法设置默认行为:如果没有提供其他方法,则将方法默认块提供给 运行?

您可以使用 Kernel#block_given? 来确定一个块是否通过并采取适当的行动。

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

这意味着如果阻止未通过,您也可以有默认操作。