私はRuby on Rails 3.1を使用しています。定数を記述するときに正しい方法で以下の問題を解決する方法を理解したいと思います。定数のステートメントに関するトラブル
は、私は2つのクラスがあります。
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
私は/ "負荷" 私は次のエラーを取得Class1
"使う" しようとすると:私は以下のコードを述べるならば、しかし
NameError in ...
uninitialized constant Class1::CONSTANT_CLASS_2_B
を
class Class1 < ActiveRecord::Base
CONSTANT_CLASS_1_B = 1
CONSTANT_CLASS_1_A = CONSTANT_CLASS_2_A * CONSTANT_CLASS_3_B # => 3
end
を私はを述べることができることを知っている:それは動作します(定数文の順序に注意してください)の前にCONSTANT_CLASS_1_B
(少なくともこの時点で問題を解決するには)、は正しいですか?つまり、私の問題を「正しい」と「実行者」wayで解決する方法がありますか(たとえば、前にClass1
の定数をロードして他の定数を取得する)?上記のコードを使用することをお勧めしますか?
ボーナス:問題のこの種の規則はありますか?もしそうなら、それは何ですか?
「の定義を倍増すると、このような問題につながり、さらに読みやすく、理解し、あなたのコードはハードになります」 - 作ることも事実でありますより明示的なコード(これは、基礎となるクラスを理解する利点/利益だと思います)。 – Backo
定数名が合理的に理解できれば、別のモデルでそれを参照することも明示的です。つまり、User :: EMAIL_REGEXは、あなたが探しているものと探しているものをかなり明白にしていると言います。 – Veraticus
あなたは正しいかもしれませんが、特に、個別に取られたクラスソースコードを読んで理解しなければならないときには、 "二重"ステートメント(つまり、明示的に理解すること)が理解できると思います。 – Backo