什么是一個(gè)存取器?
我們在前面已經(jīng)討論過實(shí)變量了,但卻未過多的討論.一個(gè)對象的實(shí)變量屬于它的屬性,也是它與其它來自同一個(gè)類的對象的一般區(qū)別.讀寫它的屬性是重要的;這樣做需要做一個(gè)叫著屬性存取器(attribute accessors)的方法.我們將很快看到我們并不是總要明確地寫出存取器方法,但現(xiàn)在先讓我們了解所有的細(xì)節(jié).存取器的兩種類型是寫(writer)和讀(reader).
ruby> class Fruit
| def set_kind(k) # a writer
| @kind = k
| end
| def get_kind # a reader
| @kind
| end
| end
nil
ruby> f1 = Fruit.new
#<Fruit:0xfd7e7c8c>
ruby> f1.set_kind("peach") # use the writer
"peach"
ruby> f1.get_kind # use the reader
"peach"
ruby> f1 # inspect the object
#<Fruit:0xfd7e7c8c @kind="peach">
足夠簡單;我們可以存取關(guān)于我們搜索的水果種類的信息.但我們的方法名還有點(diǎn)兒牢騷.下面的這個(gè)更簡潔,也更方便.
ruby> class Fruit
| def kind=(k)
| @kind = k
| end
| def kind
| @kind
| end
| end
nil
ruby> f2 = Fruit.new
#<Fruit:0xfd7e7c8c>
ruby> f2.kind = "banana"
"banana"
ruby> f2.kind
"banana"
inspect方法
一個(gè)小插曲.你已注意到當(dāng)我們試著直接觀察一個(gè)對象,就會出現(xiàn)一些像 #<anObject: 0x83678> 的東西.這只是個(gè)缺省的行為,我們可以自由地改變它.我們所要做的只是加一個(gè)名為 inspect 的方法.它會換一個(gè)更明了的描述對象的字符串,包括部分或全部的實(shí)變量.
ruby> class Fruit
| def inspect
| "a fruit of the " + @kind + " variety"
新聞熱點(diǎn)
疑難解答
圖片精選