forループを使用して文字の配列を検索しようとすると、エラー(文字列への暗黙の変換なし)が発生する理由を理解しています実際の問題であると思われる結果の文字列に追加します)。ただし、同じ目的でwhileループや 'each'を使用する場合は使用できません。私は多くのドキュメントを見てきましたが、なぜこれが起こっているのかの答えを見つけることができませんでした。私は「それぞれの」方法を使用して1日と呼ぶことができると理解していますが、原因と効果を理解することを望みます(将来この問題を避けることを望みます)。Ruby forループのデータ型変換エラー
次の方法は、元の文字列である "result"を印刷し、 "!"任意の母音の代わりに。
s="helloHELLO"
result=""
vowels=["a","e","i","o","u","A","E","I","O","U"]
string_array=s.split("")
string_array.each do |i|
if vowels.include?(i)
result+="!"
else
result+=i
end
end
puts result
はしかし、私の最初の試み上記のエラーが発生します(下記掲載なし):「ゼロのない暗黙的な変換を文字列に」引用行実験を通して5,9
s="helloHELLO"
result=""
vowels=["a","e","i","o","u","A","E","I","O","U"]
string_array=s.split("")
for i in 0..string_array.length
if vowels.include?(string_array[i])
result+= "!"
else
result+=string_array[i]
end
end
puts result
、私がために管理しましたそれを働かせてください。 「結果」に格納するのではなく画面に印刷することで、文字列「result」へのターゲット文字の連結中に問題が発生すると判断しました。しかし、なぜ "string_array [i]"(行番号9)が文字列ではなくNILとして見えるのですか?私は非常に明白な何かを逃しているように感じる。
重要な場合:これは、データ型とfor..inループの仕組みに関する基本的な質問につながるCodeWarsの単なるカタです。これは非常に関連していたようですが、私の質問マークの100%ではない:"for" vs "each" in Ruby。
ご協力いただきありがとうございます。
編集:
さて、私はそれを理解したと思います。私はまだいくつかの答えを確認したり、明確にしたり、真っ向から反論したりするのが大好きです。
私は、私はforループを使用したい場合、私はむしろ「0..array.length」よりも「範囲」として配列自体を使用する必要があることに気づいたので、のような:だから
s="helloHELLO"
result=""
vowels=["a","e","i","o","u","A","E","I","O","U"]
string_array=s.split("")
for i in string_array
if vowels.include?(i)
result+= "!"
else
result+=i
end
end
puts result
"each"メソッド変数(この場合、 "i")はメインブロックのスコープ外に存在しないので、 'vowels'配列に含まれているかどうかを評価した後、そのデータ型はnilになりますか?