Codewars Ruby Challenge — Day 21/30

陳炯翰
Han's|Sharing
Published in
2 min readSep 21, 2020

學習

  1. 使用 attr_reader 與有明確命名的取捨:當在處理 rspec 的最後一條 jill.name,有想到可以使用 attr_reader,但這表示方法名稱與回傳的實體變數得一樣,這樣 initialize 時就只能取名為 name,不能是比較有區分性的 my_name。以這題來說龍哥考量的應該是「精簡的程式碼行數」對他來說 name 與 your_name 還是有區隔;對我來講,用 my_name 與 your_name 才有區隔,所以我偏向「明確命名」而不使用 attr_reader
  2. 該往 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

我的答案

思路:

  1. 需要先新增名為 Human 的 class,與初始化 initialize
  2. 改寫原本給的類別方法 greet
  3. 新增類別方法 name

龍哥建議的答案

--

--