在这种Ruby情况下,“ self”关键字引用了什么?

问题描述 投票:0回答:2

在这种情况下,我想帮助您理解self的含义。我知道self是指“拥有”当前正在执行的代码的类,模块等。在我的示例中,my_eachEnumerable模块的实例方法。我想知道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
arrays ruby methods self
2个回答
2
投票

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

0
投票

在Ruby中,一切都是关于self的,每种方法总是针对特定的self执行的。在您的示例实例方法中,my_each self将引用使用该方法的实例。正如您所说,self也可以引用类,模块。这是一个非常强大的ruby关键字,因为它可用于创建元类。如果您有兴趣了解更多信息,建议您阅读The Well Grounded Rubyist中的第5章

© www.soinside.com 2019 - 2024. All rights reserved.