2012-03-26 12 views
0

Rubyクラスのメソッド名の名前付け方法は本当に混乱しています。 attr_accessor:私のようなアクセサを作成した場合= 名 と 名Rubyアクセサメソッドと混同しました

を私は「名前」の間に空白を有する第2メソッドを呼び出すとするとき「=」:それはメソッドに作成

に名前を付けますそれは動作します

'n.name ='と 'n.name ='両方とも動作します。

Rubyが空白を無視する場所があります。それで、なぜ私が書いたメソッドが空白で呼び出すとうまくいかないのですか?

DEF、私はこの方法を呼び出す場合、それは動作しません エンド

をGETNAME。どうして? t.get name

私はそれが動作しないので驚くことではありません。しかし、私はsetterメソッド(name =)がどのように動作するのか混乱していますか?

ありがとうございます。

答えて

3

セッターはRuby特有のものです。

実際、等号で終わるメソッド名を定義すると、その名前は割り当ての左側に表示されるようになります。代入文は、(右側の値を参照するために、その左側(左辺)に変数または属性を設定

:として

割り当てがRubyで定義されているhttp://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.htmlから

右辺値)。だから、http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html

n.name=から

は直接セッターname=を呼んでいます。

n.name =は、セッターのこの特別な扱いは、=で終わるという事実によって、左辺値として使用することができます(つまり、左側に表示されます)。

1

getNameはメソッドの名前なので、空白を持つことはできません。なぜなら、それが2つのメソッドまたは多分パラメータであると考えているからです。しかし、等号はオペランドであり、その周りにスペースがある可能性があります。それは '2 + 2'と '2 + 2'と同じです。 助けてくれること

+0

しかし、セッターでは、=はメソッド名の一部です。ではない? – HungryCoder

+0

Rubyでは、変数名とメソッド名は小文字で、単語はアンダースコアで区切ってください。キャメルケースの使用は、クラス名を除いて、強くお勧めします。 –

関連する問題