【问题标题】:Why prepend Ruby method names with self?为什么要在 Ruby 方法名称前加上 self?
【发布时间】:2012-01-04 07:27:11
【问题描述】:

在查看一些 Ruby 代码时,我注意到在方法名称前附加了 self. 声明的方法。例如:

def self.someMethod
  //...
end

在方法名称前添加self. 对方法有何影响?

【问题讨论】:

    标签: ruby syntax methods


    【解决方案1】:

    def self.something 是一个类方法,调用方式:

    Class.some_method
    

    def something 是一个实例方法,调用方式为:

    class = Class.new
    class.some_method
    

    不同之处在于,一个在类本身上调用,另一个在类的实例上调用。

    要定义一个类方法,你也可以使用类名,但是因为类名可能会改变,这将使将来重构变得更加困难。

    一些示例代码:

    class Foo
      def self.a
        "a class method"
      end
    
      def b
        "an instance method"
      end
    
      def Foo.c
        "another class method"
      end
    end
    
    Foo.a # "a class method"
    Foo.b # NoMethodError
    Foo.c # "another class method"
    bar = Foo.new 
    bar.a # NoMethodError
    bar.b # "an instance method"
    bar.c # NoMethodError
    

    【讨论】:

    • 有趣。 self 不是我将与类方法关联的第一个关键字。
    • 你也可以使用类名,我已经编辑了我的答案来显示这个。
    • 是否以类似的方式访问静态变量?可能是这样的:self.someVariable?
    • @MrMusic,在 ruby​​ 世界中,它们被称为类变量,它们使用双 @@ 语法 @@class_variable 进行初始化,我建议为它们创建“getter”和“setter”方法。这个答案可能有用。 stackoverflow.com/questions/895747/…
    • 好的,谢谢。在访问变量时,我仍然不清楚self. 的重要性。
    【解决方案2】:

    自我。使其成为类方法,而不是实例方法。这类似于其他语言中的静态函数。

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多