2016-04-08 15 views
0
class R 
    def initialize(number) 
    @number = number 
    end 

    attr_accessor :number 
end 

r = R.new(3) 

r.number => 3 
[email protected] => syntax error 
r.(@number) => undefined method call 

なぜインスタンス変数がこのように呼び出されないのですか?ruby​​インスタンスメソッドを呼び出す

私の知る限りではattr_accessor

def number 
    @number 
end 

のおかげだから r.number方法は[email protected]

私は何を逃したのである[email protected]を返す必要がありますか?

+1

ここでsawaの答えは、このようにしてインスタンス変数 '@ number'の値' r.instance_variable_get(:@ number) 'を得ることができます。 –

答えて

4

r.number方法は[email protected]

ある[email protected]を返すべきnumber方法の定義でどこ号は[email protected]言います。それは言う:@number。値は@numberです。

@numberは、メソッドではなくインスタンス変数です。あなたはそれを(他の方法でも)呼び出すことはできませんが、適切なスコープから参照することしかできません。

+0

getterメソッド以外のスコープに入る方法は他にありません? –

+0

@SzilardMagyar 'instance_eval'しかし、それはOOPを打破し、また遅いです。別の構文を使うことができれば、 'instance_variable_get'をRajarshi Dasノートとして使うことができます。 – sawa

関連する問題