首先attr_accessor相當(dāng)于attr_reader和attr_writer的合體版,相當(dāng)于在class里面生成了setter和getter方法吧,使得ruby能夠使用 instance.value 的形式賦值和取值,更加方便吧
一開始沒能理解铅碍,于是測試了很多遍,也發(fā)現(xiàn)了不少新東西,例如:原來@value實(shí)例變量是不能在方法外部賦值的老充。。螟左。
首先說說發(fā)現(xiàn)的(新)東西吧
1啡浊、attr_accessor相當(dāng)于生成一個(gè):@value的實(shí)例變量,但是這個(gè)實(shí)例變量僅在調(diào)用了 instance.value 或者 self.value 的時(shí)候(要是直接@value聲明的話- -肯定會(huì)直接生成敖罕场)才會(huì)生成
以下測試方法
class TestRuby
attr_accessor:value
def setValue
self.value = 10
end
def output
puts "#{instance_variables}"
puts value
end
end
測試執(zhí)行代碼1:
a = TestRuby.new
a.output
輸出結(jié)果: []
測試執(zhí)行代碼2:
a = TestRuby.new
a.setValue
a.output
輸出結(jié)果:[:@value] 10
測試執(zhí)行代碼3:
a = TestRuby.new
a.value = 199
a.output
輸出結(jié)果:[:@value] 199
2虫啥、當(dāng)使用 attr_accessor:value 后,直接調(diào)用value的時(shí)候奄妨,有個(gè)優(yōu)先級(jí)的屬性涂籽,初步的探討,我覺得有以下情況(可能是廢話)
- 局部變量>實(shí)例變量
同樣扔上測試的類:
class TestRuby
attr_accessor:value
def output
value = 10086
puts "#{instance_variables}"
puts value
end
end
測試執(zhí)行代碼:
a = TestRuby.new
a.value = 199
a.output
輸出結(jié)果:[:@value] 10086
當(dāng)然砸抛,如果將puts value 改為 puts self.value评雌,那么得到的一般就是199的結(jié)果了
- 方法>實(shí)例變量
測試類:
class TestRuby
attr_accessor:value
def value
puts "i am method"
end
def output
puts "#{instance_variables}"
puts self.value
end
end
測試執(zhí)行代碼:
a = TestRuby.new
a.value = 199
a.output
輸出結(jié)果:[:@value] i am method
= =這種情況,恕我太菜直焙,我不曉得如何在方法外部取到這個(gè)實(shí)例變量的值了景东,有知道的大牛們可以帶帶我~~
測試環(huán)境:macOS10.12 ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]