鐵 人
Ruby女孩(14):在Ruby中,萬事萬物都是物件 => true
2014.Oct.14

從Ruby女孩(5)到Ruby女孩(13),這九篇文章,都在介紹【The Ruby Programming Language】這本書的第三章內容,在這邊說明一下,不然怕大家心裡默默說:我到底看了啥?

【The Ruby Programming Language】

第三章:資料型別與物件

是的,其實我們已經進入這章節的尾聲了,然而這本書還有一百章(誤),照這個進度大概在鐵人賽是寫不完的(遠望)。

好的,尾聲有一個特大主題『物件』,在第一次遇到Ruby 時,就有前輩跟我說,在Ruby 的世界裡,萬事萬物都是物件!哈,這個主題很大,也無敵重要,所以在進入之前我們先來喘口氣,看看3.7的true、false、nil!

true、false與nil

『true、false與nil是Ruby的關鍵字(有些人稱保留字)。true與false是兩個布林值,可用來表示真與假、是與非、開與關。nil是一個特殊值專門用於表示不存在。』(p.75)

true不等於1;false不等於0,在Ruby中,true是一個特殊的class

true.class => TrueClass  
false.class => FalseClass  
1.class => Fixnum  
0.class => Fixnum  

看到了嗎?真、假與1、0是不一樣的!你也可以注意到,Ruby當中是沒有Boolean類別的!

nil.class => NilClass  

當Ruby 需要一個Boolean 值時,nil 的行為如同false,而nil 與false 之外的就會是true。.nil?是一個查詢一個值是否為nil的方法,例如:

a = {:name=>"Annie"} => {:name=>"Annie"}  
a[:age].nil? => true  
#因為沒有定義:age這個key,所以查詢這個key是不是不存在,執行結果就是true。  

好的,看完了真、假與不存在,接下來我們來提一些Ruby 中的物件概念。

物件(Object)

『Ruby是一種純物件導向語言:所有的值皆為物件…Ruby中,所有的物件皆繼承自一個名為Object類別,而且共享該類別所定義的方法。』(p.76)

身為一個要追根究底查明真相的初學者,當然不放過這段文字!真的嗎?大家都繼承自Object嗎?我們用.superclass這個方法來查查大家的父類別:

Ruby數字類別的分層結構

還記得這個圖嗎?來自Ruby女孩(5).superclass可以幫類別找它爸爸,例如:

Fixnum.superclass     => Integer  
Integer.superclass    => Numeric  
Numeric.superclass    => Object #喔喔喔祖先有Object  
  
String.superclass     => Object  
Array.superclass      => Object  
Hash.superclass       => Object  
NilClass.superclass   => Object  
TrueClass.superclass  => Object  

上面這些類別爸爸都是Object,有沒有可以直接查所有祖先的方法呢?有,用.ancestors,例如:

Fixnum.ancestors  
=> [Fixnum, Integer, Numeric, Comparable, Object, Kernel, BasicObject]  

OK,好吧真的證明在Ruby中,萬事萬物都是物件…

路過的阿嬤:『阿都是物件可以幹嘛?』

對吖!到底可以幹嘛?發現接下來的內容有點深,需要一點時間消化…阿嬤我們明天再來研究,Ruby 中所有物件的共同特點吧!


14天了,今天參加了Github 在臺北辦的Patchwork Taipei活動,很振奮,有機會再分享心得,但因此,想到了這句話:

Whenever you see a successful business, someone once made a courageous decision. - Peter Drucker

我也需要勇氣!

Ruby女孩(15):Ruby物件的生與死
2014.Oct.15
Ruby女孩(13):到底字串跟符號什麼時候使用比較好?
2014.Oct.13
comments powered by Disqus
Designed with by Otis Chou