Ich bin auf der Suche nach etwas Hilfe zu verstehen, warum ich einen Fehler (keine implizite Umwandlung von Nil in String) beim Versuch, eine for-Schleife zu durchsuchen durch ein Array von Buchstaben (und füge sie zu einer resultierenden Zeichenfolge hinzu, die das eigentliche Problem zu sein scheint), aber nicht, wenn ich eine while-Schleife oder "each" für die gleichen Zwecke verwende. Ich habe viele Dokumente durchgesehen, konnte aber keine Antwort darauf finden, warum dies geschieht. Ich verstehe, dass ich einfach die "jede" Methode verwenden und es einen Tag nennen kann, aber ich würde lieber die Ursache als auch den Effekt verstehen (und hoffentlich dieses Problem in der Zukunft vermeiden).Datentyp-Konvertierungsfehler in Ruby for-Schleife
Die folgende Methode funktioniert wie gewünscht: Drucken "Ergebnis", die die ursprüngliche Zeichenfolge ist, nur mit "!" anstelle von Vokalen.
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
jedoch mein erster Versuch (unten geschrieben) erwähnt den Fehler wirft oben: „keine implizite Konvertierung von Null in String“ unter Berufung auf Linien 5 und 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
Durch Experimentieren gelang es mir zu lass es funktionieren; und ich habe festgestellt - durch Drucken auf Bildschirm statt in "Ergebnis" zu speichern - dass das Problem während der Verkettung des Zielbriefs mit der Zeichenkette "result" auftritt. Aber warum wird "string_array [i]" (Zeile 9) als NIL und nicht als String betrachtet? Ich fühle mich, als würde ich etwas sehr Offensichtliches vermissen.
Wenn es darauf ankommt: Dies ist nur eine Kata auf CodeWars, die mich zu einer grundlegenden Frage über Datentypen und die Mechanik der For..in-Schleife führen. Dies schien sehr relevant, aber nicht 100% auf die Frage für meine Frage: "for" vs "each" in Ruby.
Vielen Dank im Voraus für die Hilfe.
EDIT:
Okay, ich glaube, ich es herausgefunden. Ich würde trotzdem einige Antworten lieben, um sie zu bestätigen, zu erklären oder regelrecht zu widerlegen.
Ich erkannte, dass, wenn ich die for-Schleife verwenden wollte, sollte ich das Array verwenden, sich als „Bereich“ und nicht als „0..array.length“, etwa so:
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
So ist es, dass, da die "jede" Methodenvariable (in diesem Fall "i") außerhalb des Bereichs des Hauptblocks nicht existiert, ihr Datentyp nach der Bewertung, ob sie in dem "Vokalen" -Array enthalten ist, gleich Null wird?