初めての記事投稿です。
hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })が引数として与えられたhushから
nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。を返したいとき
def hush(dog_profile)
message = ""
dog_profile.each do |key, value|
message << ("#{key}は、#{value}です。")
end
message
end
puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })
# =>
# nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。`
これがOKで
def hush(dog_profile)
message = ""
dog_profile.each do |key, value|
message.push("#{key}は、#{value}です。")
end
message
end
puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })
これだとエラーになる。
in `block in hush': undefined method `push' for "":String (NoMethodError)
from chapter6/basic_hash.rb:3:in `each'
from chapter6/basic_hash.rb:3:in `hush'
from chapter6/basic_hash.rb:9:in `<main>'
message = ""の『””』の部分
"<<"は文字列(string)
pushメソッドは配列(array) undefined method `push' for "":String (NoMethodError)
にしか追加できなさそう。
では
message = []
にしてあげればうまくいくと仮定し、変更して実施したところ
nameは、ポチです。
animalは、犬です。
ageは、5です。
weightは、12.3です。
とそれぞれが別々に呼び出されてしまう。
pushメソッドにより、message["nameは、ポチです。","animalは、犬です。","ageは、5です。","weightは、12.3です。"]
この配列が作られたので、joinメソッドで結合してあげれば目的物が返ってくる。
def hush(dog_profile)
message = []
dog_profile.each do |key, value|
message.push("#{key}は、#{value}です。")
end
message.join
end
puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })
# =>
# nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。
結論
まとめ
文字列を作りたいなら
message = "" で始めて << で連結する。
配列に要素をためていきたいなら
message = [] で始めて push で追加し、最後に join で文字列化する。