下面的代碼:紅寶石範圍變量
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
方法的局部變量?謝謝
下面的代碼:紅寶石範圍變量
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
方法的局部變量?謝謝
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
二傳手是一個實例方法,所以你可以把它叫做一個對象(有什麼實例),但不像你嘗試的那樣在你的課堂上。
x
也是一種方法。 attr_accessor :x
將x=
和x
添加到您的班級。所以,get_x調用x
方法,並返回@x
的值。詳情請參閱http://www.rubyist.net/~slagell/ruby/accessors.html。
attr_accessor
定義了在get_x
中調用的方法x
(和設置者x=
)。
>> something.methods.grep /^x/
=> [:x, :x=]
但是,如果我們有另一個方法def set_x(new_x)x = new_x end,爲什麼解釋器不會假設是x =(val)方法呢? – megas 2011-05-04 23:20:40
ehm?我不明白你 – fl00r 2011-05-04 23:21:24
我已經發送了錯誤信息 – megas 2011-05-04 23:23:13