私はルビーを学んでいましたが、ルビー定数は大文字で始まらなければならないことを学びました(例:Myconstant)。これにより定数になりますが、値は変更可能です。
定数の値が変更可能である場合、なぜ定数が必要なのですか、変数の違いは何ですか?
Rubyを使用すると、自分の足を撃つことができます(本当に必要な場合)。しかし、少なくともこの場合、それはあなたにそれについて警告します。
ONE = 'one'
ONE = 'two' # !> already initialized constant ONE
いくつかの理由:
1)コンベンション。識別子の名前だけで、変更されるべきではないことが簡単にわかります。
2)技術的。それ(おそらく;私がおそらく答えるよりも知識のある人)は通訳をより簡単にします。
3)ダイナミズムが役立つ場合があります。たとえば、テストでは、すべてをスタブ/プロキシする必要はなく、テスト目的で物事を再定義することができます…</ p>
定数には字句スコープがありますが、メソッドには動的スコープがあります。
class Super
Constant = "Super::Constant"
def method
'Super#method'
end
def get_constant
Constant
end
def get_method
method
end
end
class Sub < Super
Constant = 'Sub::Constant'
def method
'Sub#method'
end
end
Super.new.get_constant # => "Super::Constant"
Sub.new.get_constant # => "Super::Constant"
Super.new.get_method # => "Super#method"
Sub.new.get_method # => "Sub#method"
そして、変数に関しては、外部からアクセスすることはできません。これらにどのようにアクセスしますか?
class Object
Constant = 'constant'
local_var = 'local var'
@instance_var = 'instance var'
@@class_var = 'class var' # btw, never use these
end
また、Rubyでできることはたくさんありますが、自分の正気のために注意してください。定数を変更しないことをお勧めします。チームを苛立たせる可能性があります。
この機能を使用して、他に必要なパラメーターなしでコードをテストすることがあります。たとえば、パラメーターを指定するのが難しいエディターからスクリプトを実行する場合などです。
#ARGV[0] = "c:/test.txt" #in case of testing i remove the first remark sign