在这种情况下,我想帮助您理解self
的含义。我知道self
是指“拥有”当前正在执行的代码的类,模块等。在我的示例中,my_each
是Enumerable
模块的实例方法。我想知道self
关键字的工作原理,以便当我将其传递给示例数组时它会引用它。
module Enumerable
def my_each
i = 0
while i < self.size
yield(self[i])
i += 1
end
self
end
end
[2,4,5].my_each { |i|
puts i
}
=> 2
=> 4
=> 5
self
指的是取决于上下文。在您的情况下,在实例方法中,self
指代实例方法的对象接收者,因此在您的情况下,数组[2, 4, 5]
。
但是self
也可以引用其他对象。例如,
class Foo
puts self
end
打印Foo
,因为在这种情况下self
引用类对象。这就是为什么以下两个定义相同的原因
class Foo
def Foo.m
end
end
class Foo
def self.m
end
end
在Ruby中,一切都是关于self的,每种方法总是针对特定的self执行的。在您的示例实例方法中,my_each self将引用使用该方法的实例。正如您所说,self也可以引用类,模块。这是一个非常强大的ruby关键字,因为它可用于创建元类。如果您有兴趣了解更多信息,建议您阅读The Well Grounded Rubyist中的第5章