Ruby on rails 常序语句的问题

Ruby on rails 常序语句的问题,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,constants,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Constants,我正在使用RubyonRails3.1,我想了解在声明常量时如何以正确的方式解决以下问题 我有两门课: class Class1 < ActiveRecord::Base CONSTANT_CLASS_1_A = Class2::CONSTANT_CLASS_2_A # => 222 CONSTANT_CLASS_1_B = 111 end class Class2 < ActiveRecord::Base CONSTANT_CLASS_2_A = 222 C

我正在使用RubyonRails3.1,我想了解在声明常量时如何以正确的方式解决以下问题

我有两门课:

class Class1 < ActiveRecord::Base
  CONSTANT_CLASS_1_A = Class2::CONSTANT_CLASS_2_A # => 222
  CONSTANT_CLASS_1_B = 111
end

class Class2 < ActiveRecord::Base
  CONSTANT_CLASS_2_A = 222
  CONSTANT_CLASS_2_B = Class1::CONSTANT_CLASS_1_B # => 111
end
但是,如果我陈述以下代码(注意常量语句顺序),它将起作用:

class Class1 < ActiveRecord::Base
  CONSTANT_CLASS_1_B = 1
  CONSTANT_CLASS_1_A = CONSTANT_CLASS_2_A * CONSTANT_CLASS_3_B # => 3
end
class Class13
结束
我知道我可以在
常量类1\u B
之前声明
常量类1\u B
(至少在此时“解决”问题),但是否正确?也就是说,是否有办法以“正确”和“性能”的方式解决我的问题(例如,在检索其他常量之前加载所有
Class1
常量)?建议使用上述代码吗?


奖励:这类问题有约定吗?如果是这样的话,它是什么?

正确的方法可能是只有一个常量引用您要查找的数据。将定义加倍会导致类似这样的问题,而且还会使代码难以阅读和理解

如果没有真正令人信服的理由在两个地方有相同的常数,而且几乎从来没有过,那么不要定义常数类或常数类。如果需要,可以从另一个模型中引用它们,如下所示:

Class2::CONSTANT_CLASS_2_A
Class1::CONSTANT_CLASS_1_B

正确的方法可能是只有一个常量引用您正在查找的数据。将定义加倍会导致类似这样的问题,而且还会使代码难以阅读和理解

如果没有真正令人信服的理由在两个地方有相同的常数,而且几乎从来没有过,那么不要定义常数类或常数类。如果需要,可以从另一个模型中引用它们,如下所示:

Class2::CONSTANT_CLASS_2_A
Class1::CONSTANT_CLASS_1_B

“将定义加倍会导致类似这样的问题,而且会使您的代码难以阅读和理解”-同样,它会使代码更加明确(我认为这是理解底层类的一个优势/好处)。只要常量名称可以合理理解,在另一个模型中引用它同样是明确的——说User::EMAIL_REGEX可以让你很明显地知道你在寻找什么以及在哪里寻找它。你可能是对的,但我认为“double”语句更容易理解(也就是说,要明确)尤其是当你必须阅读和理解一个单独的类源代码时。“将定义加倍会导致类似这样的问题,而且会使你的代码难以阅读和理解”-同样,它会使代码更加明确(我认为理解底层类是一个优势/好处)。只要常量名称可以合理理解,在另一个模型中引用它也同样明确——说User::EMAIL_REGEX就可以很明显地看出您在寻找什么以及在哪里寻找它。您可能是对的,但我认为“double”语句(也就是说,明确地说)更容易理解尤其是当你必须阅读和理解一个类的源代码时。