【发布时间】:2016-03-09 20:20:09
【问题描述】:
如果你使用一个有 yield 的方法,而不给它传递一个块,会发生什么?
class SomeClass < Array
def some_method
yield(self[i])
end
end
a = SomeClass.new
a.some_method
有没有办法设置默认行为:如果没有给出其他方法,则给方法默认块运行?
【问题讨论】:
-
你可以检查
block_given?。block_given?将检查块是否传递给 yield。 -
block_given?上的分支。如果已给出,则屈服于它,否则运行默认行为。 -
顺便说一句,子类化数组是一个非常糟糕的主意。
-
@Sergio 我这样做是为了能够像在数组中一样使用 self[i],但搞砸了我的概念。
-
i是一个未定义的局部变量。 @Sergio 关于子类化Array的严厉警告适用于大部分(如果不是全部)Ruby 的内置类。原因已覆盖here。