2

私はルビーを学んでいましたが、ルビー定数は大文字で始まらなければならないことを学びました(例:Myconstant)。これにより定数になりますが、値は変更可能です。

定数の値が変更可能である場合、なぜ定数が必要なのですか、変数の違いは何ですか?

4

4 に答える 4

2

Rubyを使用すると、自分の足を撃つことができます(本当に必要な場合)。しかし、少なくともこの場合、それはあなたにそれについて警告します。

ONE = 'one'
ONE = 'two' # !> already initialized constant ONE
于 2012-07-25T04:57:55.160 に答える
2

いくつかの理由:

1)コンベンション。識別子の名前だけで、変更されるべきではないことが簡単にわかります。

2)技術的。それ(おそらく;私がおそらく答えるよりも知識のある人)は通訳をより簡単にします。

3)ダイナミズムが役立つ場合があります。たとえば、テストでは、すべてをスタブ/プロキシする必要はなく、テスト目的で物事を再定義することができます…</ p>

于 2012-07-25T04:58:51.747 に答える
2

定数には字句スコープがありますが、メソッドには動的スコープがあります。

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でできることはたくさんありますが、自分の正気のために注意してください。定数を変更しないことをお勧めします。チームを苛立たせる可能性があります。

于 2012-07-25T06:06:07.940 に答える
1

この機能を使用して、他に必要なパラメーターなしでコードをテストすることがあります。たとえば、パラメーターを指定するのが難しいエディターからスクリプトを実行する場合などです。

#ARGV[0] = "c:/test.txt"  #in case of testing i remove the first remark sign
于 2012-07-25T11:29:57.677 に答える