*英文發音
首先來聽聽英文發音~。
數字型別包含:
因為Ruby是物件導向的程式語言,大多數看到的皆是「物件」,肉眼看起來像數字外觀的數字也是物件的一種唷。
△肉眼觀世間,曖昧難辨
puts 1 + 2
印出來 -> 3
以上看起來簡簡單單的加法運算,但其實加號在Ruby中只是一般的方法(method),省略了小括號。
原來的樣子應該是如下:
puts 1.+(2)
印出來 -> 3
這個加號,事實上是「數字物件 1」呼叫了「+」這個方法,並且把「數字物件 2」當做參數傳進去。也因為他是一個方法,所以也可以重新改寫它原來的功能,讓 1 + 1 不等於 2 都是有可能的。
puts 3.33.round #轉成整數,四捨五入
puts 3.33.floor #轉成整數,無條件捨去
puts 3.33.ceil #轉成整數,無條件進位
puts 3.33.to_i #小數轉整數,無條件捨去
字串可以使用以下轉型方法:
to_i: 轉整數
to_f: 轉浮點數
to_sym: 轉符號
to_s: 轉字串
如下範例:
p "169.99cm".to_f # 169.99
p "169.99cm".to_i # 169
p "169.99cm".to_sym # :"169.99cm"
p :169cm.to_s # "169cm"
因為Ruby是物件導向程式語言,看過去的東西大多為物件,因此在Ruby世界裡面,整數除以整數會得到整數10/3 == 3
。
*那要如何得到小數點?
除數或被除數其中一個改小數點即可!
10.0/3 == 3.333333
10/3.0 == 3.333333
10.0/3.0 == 3.333333
*英文發音
首先來聽聽英文發音~。
https://youtu.be/EJg47hnavNM
在了解符號之前,先來加深「物件」的概念。在Ruby的世界裡,看到的大多是物件,如以下:
1000
:數字物件"World peace"
:字串物件:vegan
:符號物件由以上可以得知,「符號 Symbol」使用冒號:
開頭,他類似一種無法修改的字串,我們會說他是「有名字的物件 an object with a name」。
要注意的是,「符號」不是「變數」,是值,本身不會只向任何東西。
# 「變數」可以指向
say = "hello world!"
# 「符號」不可以指向
:say = "hello world!" -> 會出錯!
*那字串跟符號哪裡不一樣?
字串的效能會比符號差了一點點,兩者最主要的差異在於「記憶體的管理方式」,由於 Ruby中的每個字串都是新的物件,所以即使是相同的字串也會佔用不同的記憶體,而符號則是重復利用:
puts "string".object_id # 2157007700 <- 不同記憶體位置
puts "string".object_id # 2157007540
puts :symbol.object_id # 391528 <- 相同的記憶體位置
puts :symbol.object_id # 391528
*不可變(immutable)的特性?
符號具有不可變的特性,字串可以改變值,符號不行。
可由以下例子得知:
name = "abcde"
name[3] = 4
p name -> "abc4e"
name = :abcde
name[3] = 4
p name -> undefined method `[]=' for :abcde:Symbol (NoMethodError)
*符號的功用是什麼呢?
因為以上的特性,讓符號在Ruby中主要用作hash的鍵(key)或者是用來指稱方法的名稱。
hash = {:key => "12345", :symbol => "string"}
- immutable:被建立後就不能改變。
- 任何「符號」都指稱到同一個記憶體位置,因此較省記憶體。
- 以「符號」當作鍵(key)的效能會比「字串」當作鍵的效能來得好。
請回答以下問題:
1.請問符號是什麼?跟變數一樣嗎?
2.字串嵌入 String interpolation是什麼?如何實作?
3.請寫出以下p後會印出什麼?
p 3.30393.floor
p 1.33.to_i
p :hello.to_s