Ruby言語_トラップ_地雷_等の収集(一)変数か方法か不統一

1452 ワード


変数かメソッドか?
 
この文:name=my_name
別の言語でmy_nameは基本的に局所変数です.△文脈に注意しましょう.xxxについて議論しないでください.
rubyではメソッド呼び出しでカッコを省略できるのでmy_nameも一つの方法かもしれません.例えば、これ:self.my_name
 
>これは「右値」の場合にのみ適用されます.
>左の場合は、単一のローカル変数であり、メソッド呼び出しではありません.だから、ここのnameは、方法ではありません.name=というメソッドが定義されていても.
このような不利益は何ですか:統一しません.統一されていないものは、人が推測し、説明しなければならない.潜在的な雷だ.
技術的には、@記号のインスタンス変数を除去する機能は実現できません.
 
Javaのインスタンス変数:
しばらく
 
Rubyでは、次のようなことを試みています.
 
class Lee
  attr_accessor :name
end
lee = Lee.new
lee.name = "fantaxy"
puts lee.name

とても似ています.
しかし、上記のテストは完全に上書きされていません.
次の例を示します.
 
class Lee
  attr_accessor :name

  def a_test_method
    name = "fantaxy"
  end

  def another_test_method
    name = "June"
    self.name = name
  end
end

lee = Lee.new

lee.a_test_method
puts lee.name #=> nil

lee.another_test_method
puts lee.name #=> June

この例では,nameを左値とすると,@記号(すなわち@nameを用いなければ)がなくなり,nameは局所変数となる.
出力結果はこの点を確認した.
 
nameの前にselfを付ける必要があります!!
 
お嬢さん:
#1 java類似バージョンに統一されたインスタンス変数はまだ使用できません
#2このような左値と右値の使用が一致しないのは、注意しなければならない罠です.
#3 rubyのメソッドは括弧を省略して、nの多くの利益を得たと同時に、多くの代価を払った!!
 
 
====完了===
+
-
*
/