2016-04-08 11 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 

Warum kann die Instanzvariable nicht auf diese Weise aufgerufen werden?Aufruf der Ruby-Instanzmethode

Soweit ich weiß, dank der attr_accessor

def number 
    @number 
end 

So r.number Methode sollte [email protected] zurück, die [email protected]

ist

Was habe ich verpasst?

+1

Hier ist die Antwort perfekt, man kann die Instanzvariable '@ number'-Wert' r.instance_variable_get (: @zahl) 'auf diese Weise bekommen –

Antwort

4

r.number Methode sollte [email protected] zurück, die [email protected]

Nr Nirgendwo in der Definition der number Methode sagt [email protected] ist. Es sagt: @number. Es sollte den Wert @number zurückgeben.

@number ist eine Instanzvariable, keine Methode. Sie können es nicht (auf diese Art oder auf andere Weise) aufrufen, Sie können nur von einem geeigneten Bereich darauf verweisen.

+0

Gibt es einen anderen konventionellen Weg, um in den Geltungsbereich neben der Getter-Methode zu gelangen ? –

+0

@SzilardMagyar 'instance_eval'. Aber das besiegt OOP und ist auch langsam. Wenn Sie eine andere Syntax verwenden können, können Sie 'instance_variable_get' verwenden, wie Rajarshi Das bemerkt. – sawa