Codewars Ruby Challenge — Day 21/30
Published in
2 min readSep 21, 2020
學習
- 使用 attr_reader 與有明確命名的取捨:當在處理 rspec 的最後一條 jill.name,有想到可以使用 attr_reader,但這表示方法名稱與回傳的實體變數得一樣,這樣 initialize 時就只能取名為 name,不能是比較有區分性的 my_name。以這題來說龍哥考量的應該是「精簡的程式碼行數」對他來說 name 與 your_name 還是有區隔;對我來講,用 my_name 與 your_name 才有區隔,所以我偏向「明確命名」而不使用 attr_reader
- 該往 Codewars 更高級走了:開始發現刷 7、8 級的題目上沒有什麼問題,表示成長幅度下降了,明天再刷一題確認一下,準備往上爬~
題目:
# 調整以下實作,讓程式可順利執行
def greet(my_name, your_name)
"Hello #{your_name}, my name is #{my_name}"
end
答案需要過以下測試:
RSpec.describe do
it "打招呼!" do
jack = Human.new("Jack")
jill = Human.new("Jill")
expect(jack.greet("Jill")).to eq "Hello Jill, my name is Jack"
expect(jack.greet("Mary")).to eq "Hello Mary, my name is Jack"
expect(jill.greet("Jack")).to eq "Hello Jack, my name is Jill"
expect(jill.name).to eq 'Jill'
end
end
我的答案
思路:
- 需要先新增名為 Human 的 class,與初始化 initialize
- 改寫原本給的類別方法 greet
- 新增類別方法 name