定义方法(如self.method_name)和类Classname的区别是什么?类<<自我; Ruby中的def method_name

时间:2019-07-15 12:52:23

标签: ruby module instance metaprogramming

我无法理解在接下来的情况下红宝石的工作原理。

我有下一个代码:

module MainParams
 CATEGORY = 'Animals'
end

class Person
  include MainParams

  class << self
    def get_category
      CATEGORY
    end
  end
end

当我尝试调用Person.get_category时收到了

uninitialized constant #<Class:Person>::CATEGORY (NameError)

但是当我更改Person类时:

class Person
  include MainParams

  def self.get_category
    CATEGORY
  end
end

当我调用

Person.get_category

我收到成功的结果

"Animals"

您能解释一下它是如何工作的吗?早些时候,我认为这是定义类方法的相同方法。或给我链接到文档,这种情况的解释在哪里。

0 个答案:

没有答案