欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ruby 存取器 概念

 更新時(shí)間:2007年11月24日 14:23:09   作者:  

 什么是一個(gè)存取器?

我們?cè)谇懊嬉呀?jīng)討論過實(shí)變量了,但卻未過多的討論.一個(gè)對(duì)象的實(shí)變量屬于它的屬性,也是它與其它來(lái)自同一個(gè)類的對(duì)象的一般區(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">  


足夠簡(jiǎn)單;我們可以存取關(guān)于我們搜索的水果種類的信息.但我們的方法名還有點(diǎn)兒牢騷.下面的這個(gè)更簡(jiǎn)潔,也更方便.

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)我們?cè)囍苯佑^察一個(gè)對(duì)象,就會(huì)出現(xiàn)一些像 #<anObject: 0x83678> 的東西.這只是個(gè)缺省的行為,我們可以自由地改變它.我們所要做的只是加一個(gè)名為 inspect 的方法.它會(huì)換一個(gè)更明了的描述對(duì)象的字符串,包括部分或全部的實(shí)變量.

ruby> class Fruit
    |   def inspect
    |     "a fruit of the " + @kind + " variety"
    |   end
    | end
   nil
ruby> f2
   "a fruit of the banana variety"  


一個(gè)相關(guān)的方法是to_s(轉(zhuǎn)化為字符串),用在打印對(duì)象的時(shí)候.一般的,你可以認(rèn)為 inspect 是一個(gè)編寫或調(diào)試程序時(shí)用的工具,而 to_s 是一個(gè)美化程序輸出的方法.eval.rb顯示結(jié)果時(shí)總采用 inspect. 你可以用 p 方法簡(jiǎn)單的從程序里取得調(diào)試信息.

# These two lines are equivalent:
p anObject
print anObject.inspect, "\n"  


生成存取器的簡(jiǎn)單方法

因?yàn)樵S多實(shí)變量需要存取方法, Ruby提供了對(duì)應(yīng)于標(biāo)準(zhǔn)方法的縮寫.

Shortcut縮寫          Effect等同于  
attr_reader :v        def v; @v; end  
attr_writer :v        def v=(value); @v=value; end  
attr_accessor :v      attr_reader :v; attr_writer :v  
attr_accessor :v, :w  attr_accessor :v; attr_accessor :w  

讓我們利用它加上"新鮮"信息.首先,我們自動(dòng)生成了讀和寫方法,然后我們合并這一新信息到 inspect 中去:

ruby> class Fruit
    |   attr_accessor :condition
    |   def inspect
    |     "a " + @condition + @kind"
    |   end
    | end
   nil
ruby> f2.condition = "ripe"
   "ripe"
ruby> f2
   "a ripe banana"  


更有趣的水果

如果沒人吃我們成熟的水果,也許我們?cè)撟屗鼈儬€掉.

ruby> class Fruit
    |   def time_passes
    |     @condition = "rotting"
    |   end
    | end
   nil
ruby> f2
   "a ripe banana"
ruby> f2.time_passes
   "rotting"
ruby> f2
   "a rotting banana"  


但當(dāng)我們這樣做時(shí),卻引入了一個(gè)小問題.現(xiàn)在,如果我們?cè)賱?chuàng)造第三個(gè)水果會(huì)發(fā)生什么?記住:實(shí)變量不會(huì)在賦值前存在.

ruby> f3 = Fruit.new
ERR: failed to convert nil into String  


是 inspect 方法在這里挺有理由地抱怨.我們已讓它報(bào)告水果的品種和狀態(tài),但 f3 還未賦過任何值.如果我們?cè)敢?我們可以重寫inspect方法使之用 define? 方法測(cè)試實(shí)變量并只在它們存在時(shí)才報(bào)告,但也許那不是很有用;因?yàn)槊恳粋€(gè)水果都有類型和狀態(tài).看來(lái)我們應(yīng)該在某種程度上確定其屬性.這正是下一節(jié)我們要討論的.  
 

相關(guān)文章

  • ruby實(shí)現(xiàn)修改ubuntu下的hosts

    ruby實(shí)現(xiàn)修改ubuntu下的hosts

    本文給大家分享的是通過ruby獲取github上的hosts文件內(nèi)容,修改到本地Ubuntu中,十分的實(shí)用,具體你懂得,有需要的小伙伴可以參考下。
    2015-06-06
  • Ruby On Rails中如何避免N+1問題

    Ruby On Rails中如何避免N+1問題

    select語(yǔ)句的數(shù)目太多,需要頻繁的訪問數(shù)據(jù)庫(kù),會(huì)影響檢索性能。如果需要查詢n個(gè)Customer對(duì)象,那么必須執(zhí)行n+1次select查詢語(yǔ)句。這就是經(jīng)典的n+1次select查詢問題。
    2014-07-07
  • Ruby中的鉤子方法詳解

    Ruby中的鉤子方法詳解

    這篇文章主要介紹了Ruby中的鉤子方法詳解,本文講解了什么是鉤子方法、included、Devise中的 included、extended、ActiveRecord中的 extended、prepended、inherited等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Ruby中用線程實(shí)現(xiàn)經(jīng)典的生產(chǎn)者消費(fèi)者問題代碼實(shí)例

    Ruby中用線程實(shí)現(xiàn)經(jīng)典的生產(chǎn)者消費(fèi)者問題代碼實(shí)例

    這篇文章主要介紹了Ruby中用線程實(shí)現(xiàn)經(jīng)典的生產(chǎn)者消費(fèi)者問題代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼和運(yùn)行效果,需要的朋友可以參考下
    2015-01-01
  • Ruby中的迭代器詳解

    Ruby中的迭代器詳解

    這篇文章主要介紹了Ruby中的迭代器詳解,本文講解了字符串、數(shù)字、數(shù)組、Map、文件、目錄等情況下使用迭代器的例子,需要的朋友可以參考下
    2014-09-09
  • 什么是ruby和Ruby概述

    什么是ruby和Ruby概述

    什么是ruby和Ruby概述...
    2007-11-11
  • Ruby的運(yùn)算符和語(yǔ)句優(yōu)先級(jí)介紹

    Ruby的運(yùn)算符和語(yǔ)句優(yōu)先級(jí)介紹

    這篇文章主要介紹了Ruby的運(yùn)算符和語(yǔ)句優(yōu)先級(jí)介紹,本文先是給出了一些小例子來(lái)驗(yàn)證運(yùn)算符和語(yǔ)句優(yōu)先級(jí),然后總結(jié)出一個(gè)優(yōu)先級(jí)表,需要的朋友可以參考下
    2015-03-03
  • 舉例初步講解Ruby中的正則表達(dá)式

    舉例初步講解Ruby中的正則表達(dá)式

    這篇文章主要介紹了Ruby中的正則表達(dá)式,是Ruby學(xué)習(xí)進(jìn)階當(dāng)中的重要知識(shí),需要的朋友可以參考下
    2015-05-05
  • Ruby中的異常處理代碼編寫示例

    Ruby中的異常處理代碼編寫示例

    這篇文章主要介紹了Ruby中的異常處理代碼編寫示例,作者對(duì)異常處理的方式給出了一些比較通用的建議,需要的朋友可以參考下
    2015-08-08
  • ruby on rails 代碼技巧

    ruby on rails 代碼技巧

    對(duì)于rails的一些使用技巧的代碼
    2009-01-01

最新評(píng)論