iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

從零開始的工程師轉職之路.新手學Ruby / Ruby on Rails遇到的問題系列 第 15

Day15-[Ruby]超級比一比.符號、變數、字串三者的差別?

  • 分享至 

  • xImage
  •  

Day15-[Ruby]超級比一比.符號、變數、字串三者的差別?

上章提到符號特別的地方,
今天就以實際的例子比較三者之間的不同吧!

符號v.s.變數

變數是一個指向某物件的名字,並不是物件,無法單獨存在。

name #錯誤訊息
name = "Ruby"   #變數name指向字串"Ruby"

而符號是一個帶有名字的物件,可以單獨存在。

:name  #程式執行正常

當然也就不能像變數一樣,把符號指向其他的物件。

:name = "Ruby"   #錯誤訊息

因為符號本身就是有名字的物件,不能再被指向其他物件。
就像叫兔子不可能指鳥。

符號v.s.字串

1. symbol的內容不能改變

字串想要改其中一個字是可以的,但符號不行。

"abcd"[0] = "z"    #字串變成"zbcd"
:abcd[0] = "z"     #錯誤訊息

2. symbol指到同一個記憶體位置

字串每次的記憶體位置是不固定的,而符號是同一個記憶體位置。

5.times do
  puts "abcd".object_id
end

結果分別是:720 740 760 780 800

5.times do
  puts :abcd.object_id
end

結果都是:1920348

*每個人電腦的記憶體位置顯示都會有差異喔!
我的例子是用Replit執行的結果。

3. symbol的效能比較好

程式在比較符號是否相同時,
是直接比對這物件的object_id是否相同,
但在比較字串時,
它是一個一個字母比對,
因此比較的時間會隨著字母的數量而增加。

結論:
如果你要快速、固定的物件,可以使用符號。
如果你要可變動性比較強,功能比較多時,可以使用字串。
而兩者也可以使用.to_sym、.to_s等方法互換喔!

tags: Ruby symbol 字串 變數

上一篇
Day14-[Ruby]奇怪卻很重要.符號(Symbol)是什麼?
下一篇
Day16-[Ruby]存取限制比一比.Public, Protected, Private的比較(Part I)
系列文
從零開始的工程師轉職之路.新手學Ruby / Ruby on Rails遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言