1. 程式人生 > >2.4 ruby的資料型別--符號(Symbol)、特殊值(True、False 和 Nil)

2.4 ruby的資料型別--符號(Symbol)、特殊值(True、False 和 Nil)

1、符號(Symbol)

符號物件表示Ruby中的一些名稱(類名、方法名、變數名等)和一些字串。表現形式有:name或者:“string”,建立的物件會儲存在ruby的符號表中,相同內容的符號不會再重新建立,在一些情況下,使用符號(Symbol) 處理名字可以降低 Ruby 記憶體消耗,提高執行速度。

2、符號和字串的區別

(1)符號的優點是降低ruby的記憶體消耗,從而提高執行速度,符號的內容如果是相同的,則不會建立新的Symbol(符號)物件。字串內容如果是相同的,還是會建立新的String(字串)物件。

可以通過 object_id 方法來得到一個物件識別符號(物件識別符號相當於物件的地址,可以用過物件識別符號來區別是否是一個物件),我們通過程式碼來看看符號和字串的區別

#定義兩個相同的符號
irb(main):011:0> foo_1 = :"hello"
=> :hello
irb(main):012:0> foo_2 = :"hello"
=> :hello
#兩個相同符號的物件識別符號一樣
irb(main):015:0> foo_1.object_id
=> 8447388
irb(main):016:0> foo_2.object_id
=> 8447388
#定義兩個相同的字串
irb(main):013:0> foo_3 = "hello"
=> "hello"
irb(main):014:0> foo_4 =
"hello" => "hello" #兩個相同符號的物件識別符號不一樣 irb(main):017:0> foo_3.object_id => 70209820671880 irb(main):018:0> foo_4.object_id => 70209820665580

根據上面例子可以看出相同的內容,符號不會建立新的物件,但是字串會建立新的物件,在某些情況下,字串的這種特性就會浪費記憶體

那麼我們什麼時候用字元,什麼時候用字串呢?可以參考以下標準:

  • 一個字元定義之後可能會變化,則用String(字串)
  • 一個字元定義之後不會變化,則用Symbol(符號)。比如雜湊表的關鍵字

3、型別轉換

(1)字串轉符號 to_sym
irb(main):019:0> "hello".to_sym
=> :hello
(2)符號轉字串 to_s
irb(main):020:0> :hello.to_s
=> "hello"

4、特殊值

Ruby的特殊值有true、false、nil

Ruby 中沒有 Boolean 類,True、False 和 Nil 分別是 TrueClass、FalseClass 和 NilClass 的單鍵例項。

常用於語句的判斷中 在ruby中除了nil和false表現為false,其他的均表現為true。0也表現為true,這裡注意和其他語言的區別