學習
-
多個賦值寫在同一行:當我們在宣告多個變數時,我們會寫成多行,像是 a = 1 和 b = 2,就會有兩行,今天透過龍哥的 code,發現原來可以用一行寫就好「a, b = 1, 2」,會達到同樣效果
-
Asterisk(星號) in Ruby:「*」這個符號在 Ruby 真的蠻好用,以我目前學到的就有兩種功用 (1) 合併 (2) 炸開,用以下範例說明:
(1)合併
*name = "rz", "chen"
p name # 印出 ["rz", "chen"]
【說明】一個變數只能給它一個賦值,但透過「*」可以將同時給多個賦值,不管多少個,都會被收成一個陣列
(2)炸開
p [*(2..5)] #印出 [2, 3, 4, 5]
【說明】一般我們想產生 [2, 3, 4, 5],會用 (2..5).to_a,用 range 把 2~5 產生出來塞進 array,透過「*」可以把 (2..5) 炸開,然後放進 array 中
題目:
# 實作以下內容
# 把 code 寫在這兒!
答案需要過以下測試:
RSpec.describe do
it "當個有禮貌的人" do
person = Person.new('Bob', 'Smith')
expect(person.greet).to eq 'Hello, Bob Smith!'
end
end
我的答案
class Person
def initialize(*name)
@name = name.join(" ")
end
def greet
"Hello, #{@name}!"
end
end
思路:
- 看到題目想說怎麼只有測試而已,原來今天是 TDD(Test-Driven Development) 的部分,也就是先寫測試再開發,整個興奮(?)
- 從測試看來,需要有 Class、Class method,Class method 包含 initialize 與 greet
- 看到 initialize 有給兩個值,但最後印出來其實兩者中間只差一個空格,想到可以用「*」組合成陣列來處理
龍哥建議的答案
class Person
def initialize(first_name, last_name)
@first_name, @last_name = first_name, last_name
end
def greet
"Hello, #{@first_name} #{@last_name}!"
end
end