首页 文章

Ruby类方法设置

提问于
浏览
4

我正在浏览Ruby Koans Ruby Koans,我正处于"about_class_methods.rb"的一个地方,那里有关于设置类方法的讨论,Koans谈论三种方式 .

编写类方法的两种主要方法是:

1:

class Demo (define/open class)
  def self.method
end

2:

class << self
    def class_methods
    end
  end

koans还谈到第三种方法,我从未见过(我记得):

def Demo.class_method_third_way
end

Q1第三种方式对我来说实际上比任何其他方式更清晰 . 有什么理由我不明白为什么没有人使用它?

Q2为什么我认为2的语法应该是“self << def name end”?那就是“为什么语法是这样的呢?” Object类是否包含对所有类的引用,这是否适用于自我类的方法?

一如既往,感谢您的帮助和耐心!

2 回答

  • 5

    在(早期)开发类中,随着洞察力的增长而重命名(不是 Person ,而是 Employee ,而不是 Job ,而是一个或多个 Roles 等) . 如果类名在类本身中是硬编码的,则此重命名很容易出错 .

  • 3

    在类体中, self 指的是正在定义的类对象 . 这就是 def self.some_methoddef Demo.some_method 相同的原因 .

    class Demo
      puts self.object_id == Demo.object_id
    end
    #=> true
    

    class << some_obj 是访问 some_obj 的单例类的语法 . 请参阅Ruby doc

    对象的单例类(也称为元类或本征类)是仅包含该实例的方法的类 . 你可以使用类<< object来访问对象的单例类...最常见的是你会看到像这样访问的单例类:

    class C
      class << self
        # ...
      end
      # or
      class << C
      end
    end
    

相关问题