2011-05-04 163 views
1

下面的代碼:紅寶石範圍變量

class Something 
    attr_accessor :x 
    def initialize(x) 
     @x = x 
    end 
    def get_x 
     x 
    end 
end 

something = Something.new(5) 
something.get_x # => 5 

爲什麼解釋返回5,如果x只是在get_x方法的局部變量?謝謝

回答

4

attr_accessor :x增添兩個方法給你:

def x=(val) 
    @x = val 
end 

def x 
    @x 
end 

所以你實際上並不需要get_x吸氣,如果你已經添加attr_accessor方法。

UPD

所以,問題是

class Something 
    attr_accessor :x 
    def initialize(x) 
    @x = x 
    end 
    def set_x=(new) 
    x = new 
    end 
end 

爲什麼不x = new調用默認x二傳手:因爲默認x二傳手是一個實例方法,所以你可以把它叫做一個對象(有什麼實例),但不像你嘗試的那樣在你的課堂上。

+0

但是,如果我們有另一個方法def set_x(new_x)x = new_x end,爲什麼解釋器不會假設是x =(val)方法呢? – megas 2011-05-04 23:20:40

+0

ehm?我不明白你 – fl00r 2011-05-04 23:21:24

+0

我已經發送了錯誤信息 – megas 2011-05-04 23:23:13

2

attr_accessor定義了在get_x中調用的方法x(和設置者x=)。

>> something.methods.grep /^x/ 
=> [:x, :x=]