代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

当我们在Ruby和Rails的一个类中定义了一些常量时,我们能保证能够在另一个类中访问它吗?

  •  0
  • nonopolarity  · 技术社区  · 5 年前

    如果类定义中有一些常量:

    class Animal < ActiveRecord::Base
      GROWTH_FACTOR = 2
    
      ...
    end
    

    是不是有时候 Animal::GROWTH_FACTOR 可供其他类或ERB使用,例如

    class Plant < ActiveRecord::Base
      GROWTH_FACTOR = Animal::GROWTH_FACTOR / 2.0
    
      ...
    end
    

    <%= Animal::GROWTH_FACTOR %>
    

    但有时不是吗?(因此,它将随机失败,这取决于Rails服务器是否重新运行 Animal GROWTH_FACTOR 只有真正保证在每个类自己的定义中是可用的?如果我们想保证它是可用的,它是用来使用的吗 @@GROWTH_FACTOR 在课堂内,然后使用 Animal.GROWTH_FACTOR

    1 回复  |  直到 5 年前
        1
  •  1
  •   Stephen Crosby    5 年前

    在您的例子中,“动物”和“植物”都是全局常数。只要这些声明已经过评估,只要它们没有以某种方式未定义,它们都可以从任何地方访问,包括类中定义的任何常量。

    如果这两个类在名为'动物.rb'和'工厂.rb,则可以通过 require 正在处理这些文件。如果一个依赖于另一个,那么你需要文件的顺序就很重要了。

    在你的问题的第二部分,你提到了一个不同的语法 @@ 这不是一回事。除非您完全理解Ruby中类变量的含义,否则我会避开这种语法。