50

Ruby でプログラミングを始めて数か月が経ちましたが、いつクラス変数よりも定数を使用したり、その逆を行うのが適切なのか疑問に思っています。(私はRailsで作業しており、モデルの定数について考えています)。

class Category
  TYPES = %w(listing event business).freeze
end

また

class Category
  @@types = %w(listing event business).freeze
  cattr_reader :types
end

ある状況が別の状況よりも好ましい状況はありますか? それとも好みやスタイルの問題ですか?

4

5 に答える 5

57

主なことは、CONSTANT 表記を使用することで、読者に明確に伝えることができるということです。小文字の凍結された文字列は、設定可能である可能性があるという印象を与え、誰かが戻って RDoc を読むことを余儀なくされます。

于 2008-12-22T22:31:01.293 に答える
11

これらがソース コードで定義する定数値であり、コードの実行中に変更したくない場合は、定数を使用することをお勧めします。

実行中にこれらの値を動的に設定および/または変更する場合は、クラス変数を getter および setter と共に使用します。

于 2008-12-22T22:37:43.700 に答える
8

基本的には、次のように言えます。定数が必要な場合は、定数を使用します。変数が必要な場合は、変数を使用します。タイプのリストは固定された配列であるため、定数のように見えるので、この場合は定数を使用するのが理にかなっていると思います。

于 2008-12-25T10:10:24.173 に答える
2

クラス変数は、クラスとそのインスタンスに対してプライベートであることに注意してください ( http://phrogz.net/programmingruby/tut_classes.htmlを参照)。ただし、定数を非公開にしたい場合は、いつでも実行できます。

FOO = 18
private_constant :FOO
于 2018-09-28T16:05:04.773 に答える
2

プログラムの実行中に値を変更したくなく、クラス外で値にアクセスできるようにする場合は、定数を使用します。

それ以外の場合は、クラス変数を使用できます。ただし、クラス変数はサブクラスおよびサブクラスのインスタンス間で共有されることに注意してください。したがって、将来、子クラスを実装する可能性がある場合は、クラス変数の使用に十分注意する必要があります。

詳細については、こちらの回答を参照してください: Ruby のクラス変数

于 2015-05-28T14:59:48.970 に答える