Ruby 標志對象
本章節(jié)我們要介紹一種Ruby獨有的標志對象(Symbol),了解標志對象的定義方式以及存儲機制,了解標志對象與字符串對象的區(qū)別以及一些常用的實例方法。
1. 什么是標志對象
標志是 Symbol 類的唯一實例,通常用于標識特定資源。標志是唯一的,因為在運行的程序中只能為特定標志創(chuàng)建 Symbol 類的一個實例。從特點上來講,它更像一個字符串。
實例:
> :hello.object_id
=> 1277788
> :hello.object_id
=> 1277788
解釋:在這里,我們可以看到:hello符號僅創(chuàng)建一次,因為兩次調(diào)用:hello.object_id
返回相同的對象標識符。
而字符串則不同,即使字符串的內(nèi)容一樣,他在被調(diào)用的時候也會創(chuàng)建一個新的 String 對象。
實例:
> 'hello'.object_id
=> 70300743069360
>'hello'.object_id
=> 70300743056220
2. 如何創(chuàng)建標志對象
我們在需要創(chuàng)建的內(nèi)容之前加上一個冒號:
即可創(chuàng)建一個 Symbol 對象。
實例:
> :ruby
=> :ruby
:ruby.class
=> Symbol
注意事項:一定要是字母開頭,數(shù)字不能在最前面。
3. 何時會用到標志對象
3.1 表示方法和實例變量的名稱
實例:
attr_reader :title
attr_reader
之后的:title
是代表@title
實例變量的符號。這塊您將會在Ruby類的創(chuàng)建一章學(xué)習(xí)到。
3.2 作為哈希的key
實例:
hash = {a: 1, b: 2, c: 3}
哈希的概念我們會在Ruby哈希章節(jié)中學(xué)習(xí)。
3.3 元編程中傳遞參數(shù)
符號可用于元編程(Metaprogramming)方法中,例如send
:
實例:
[1,2,3].send(:first)
元編程會在進階時候為您解答。
4. 標志類型的實例方法
注意事項:標志類型僅擁有少量的字符串類型的方法而且無法更改,如果需要對標志的內(nèi)容進行操作需要把標志轉(zhuǎn)換成字符串。
4.1 轉(zhuǎn)換成字符串
您可以使用to_s
方法執(zhí)行此操作。
實例:
> :message.to_s
=> "message"
同樣您也可以使用to_sym
方法將字符串轉(zhuǎn)換成Symbol類型,Symbol也擁有這個方法,這個返回值的方法是它本身。
實例:
> "message".to_sym
=> :message
4.2 大小寫轉(zhuǎn)換
這個方法和字符串一樣使用downcase
和upcase
。
> :abc.upcase
=> :ABC
> :ABC.downcase
=> :abc
4.3 獲取標志的長度
使用length
或者size
。
> :hello.length
=> 5
> :hello.size
=> 5
4.4 empty?
判斷 Symbol 對象是否為空字符串。
> :"".empty?
=> true
5. 小結(jié)
本章中我們學(xué)習(xí)了什么是標志對象,在表示方法和實例變量名稱、哈希 key 值、元編程傳參中使用標志對象。標志更像字符串擁有字符串的部分方法,如何和字符串轉(zhuǎn)換。