iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
Software Development

Ruby 研究 30 天系列 第 11

Day 10 - Ruby 裡的非物件

  • 分享至 

  • xImage
  •  

非物件

在前面2天我們了解到物件們的相互關係,而今天我們來討論一下有哪些東西不是物件。

Variable

變數是幾乎所有程式語言都需要的東西,然而在 Ruby 中,變數不像 JS 可以只做宣告而不指定,也就是說變數宣告必定會將一個 value 指定給該變數,這不禁會讓人懷疑一下, variable 或許只是作為該 value 的標籤或代名詞而已。

a_variable = 10
a_variable.object_id    # 印出 21
10.object_id            # 印出 21

object_id 這個方法可以找出 Ruby 給予該物件的編號,可以發現變數的編號和它被指定的值相同,那如果沒有做變數宣告呢?可想而知那 Ruby 會直接不承認這個變數存在 undefined local variable or method 'a' for main:Object

其實賦值運算子 = 可以看成是一個 貼標籤 的行為,不要想成數學的左邊等於右邊了。


Method

def a_method
end

a_method.object_id    # 印出 8

我們把方法也拿來試試,這裡會發現是可以得到 object id 的,不過如果多玩幾次 object_id 這個方法應該會發現一件事,除了 integer 可以看出 id 是 (2n + 1) 以外,自己所新宣告的物件 id 的絕對值都非常的大。

"little_genius".object_id   # 印出 70204642204120
0.object_id                 # 印出 1
0.5.object_id               # 印出 -72057594037927934

那麼上面的 object id 8 就顯得很奇特了

def another_method
  10
end

another_method.object_id   # 印出 21

宣告一個有回傳值的方法可以發現,原來方法所得到的 object id 就是回傳值的 object id ,那麼這個 8 是哪來的大家應該知道了吧?!

puts nil.object_id # 印出 8

下一篇來說說最有名的非物件 block 吧!

此文同步刊登於CJ-Han的網站


上一篇
Day 9 - Class - 物件導向
下一篇
Day 11 - Block
系列文
Ruby 研究 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言