Jag var nyfiken på var det gick snett med den första filen fortfarande, så jag jämförde dem rad för rad.
Genom att jämföra det fungerande skriptet med det med felmeddelande
Genom att jämföra dem på min skärm märkte jag två skillnader som jag rättade till en i taget.
1. När de tidigare funktionerna anropades i senare funktioner t.ex.
def ex25.print_first_and_last(sentence)
words = ex25.break_word .. etc
Funktionen ex25.break_word såg ut som om den inte hade erkänts i felskriptet (det till höger) medan Ex25. verkade blått i det andra skriptet (till vänster).
Den mest uppenbara orsaken som jag kunde komma på var att ”e” inte var versalt. Så jag ändrade alla Ex25 i det trasiga skriptet till ett stort e.
Jag körde skriptet men fick fortfarande samma felmeddelande:
ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)
2. Nästa enkla lösning som jag märkte var att filnamnet och funktionsnamnet i det trasiga skriptet var detsamma men i mitt nya skript hade jag namngett filen EX25b.rb.
Kanske var det denna skillnad i namngivning som orsakade felet?
Nej ..
ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)
Hade jag läst hela övningen i Learning Ruby the Hard Way hade jag sett att detta inte var svaret:
”Ex25-modulen behöver inte ligga i en fil som heter ex25.rb. Försök att lägga den i en ny fil med ett slumpmässigt namn, importera sedan den filen och se hur du fortfarande har Ex25 tillgängligt.”
Så jag bestämde mig för att gå tillbaka till den första lösningen, icke-avbrytande mellanslag, eftersom jag nu hade uttömt de enkla alternativen och inte kunde se någon skillnad mellan felet och det korrekta skriptet.
Highlight invisible characters in my text editor- Part 2
Jag läste hur man gör detta här.
1. Öppna ”preferences” inom Sublime text editor & välj ”key bindings”.
2. Lägg in följande kod på vänster sida, under fliken ”user”:
{
"keys": ,
"command": "insert_snippet",
"args": {"contents": " "}
}
3. Sparade och öppnade sedan den ursprungliga (trasiga 🙁 ) filen igen.
Säkerligen fanns det ett oavsiktligt Alt- och mellanslag som inte bryter mellanslag:
HALLELUJAH… Jag trodde… Jag har äntligen fixat mitt gamla skript…….
Jag körde det igen och fick fortfarande samma felmeddelande!
Här borde jag nog ha tänkt:
”Jag fick det rätt en gång och lyckades arbeta mig igenom övningen och slutföra den. Jag kommer bara att kalla det en dag och inte oroa mig för filen som returnerar ett felmeddelande”.
Men jag är för nyfiken/storvulen för att nöja mig med att bara låta felet hänga över mitt första skript.
Jag körde irb i terminalen.
Jag körde filen jag hade fått rätt igen & filen med felmeddelandet:
Jag försökte ta reda på vad som var skillnaden mellan de två filerna.
Kanske var det katalogerna de var sparade i?
Jag kontrollerade och visst var de sparade i olika kataloger.
Så jag sparade felfilen i samma katalog som filen som fungerade…. Jag kunde inte se någon annan skillnad så jag ….
Kopierade och klistrade in texten från den fungerande filen till felfilen.
Då hände något fruktansvärt!
Båda filerna slutade att fungera!!!!
Samma felmeddelande dök upp för den första filen och nu returnerade arbetsfilen ”false” när jag ”krävde” den med irb:
Möjlig orsak till problemet:
Troligt många filer med samma eller liknande namn i samma katalog?
Jag raderade alla utom en… Och som genom magi ..
Det fungerade!!!
Jag körde arbetsskriptet för Ex25 i terminalen och följde instruktionerna om hur man använder irb för att kalla dess funktioner.
Här är mina resultat och min förklaring av vad som händer:
Det korrekta skriptet för Ex25
Körning av skriptet på kommandoraden. ’irb’
Jag har märkt ut de punkter där jag var tvungen att tänka lite på hur det fungerade. Här är min förklaring:
1. Skriver ut ”vänta” eftersom funktionen agerar på arrayen ”words” som inte är sorterad. Den sorterade matrisen heter ”sorted_words”.
2. Matrisen ”Words” har fått det första och sista värdet (”all” och ”wait” ) bortförskjutet i utskriftsfunktionen.
3. Anropar matrisen ”sorted_words”, inte matrisen ”words” som har de saknade värdena. Därför finns ”all” fortfarande kvar i matrisen.
4….Skulle saknas i bilden … Så jag bedömde det helt klart som irrelevant då och kommer därför att göra samma sak igen nu.
5. Använder den ursprungliga variabeln ”sentence” och skickar den genom funktionen. Den delar upp denna sentence-variabel i en array varje gång den möter ett mellanslag. Sedan använder den funktionen Ex25.sort_words för att sortera denna matris av ord.
6. Den tar den ursprungliga variabeln ”sentence”, bryter den till en matris av ord och skriver sedan ut det första och sista värdet i denna matris.
Så vi har nu kommit till slutet av min kamp med övning 25 i Learn Ruby the Hard way. Jag hoppas att du har uppskattat och funnit min higgledy piggldy problemlösning användbar, vilket till slut resulterade i att jag lyckades övervinna de felmeddelanden som gavs när jag körde mitt skript. Kontakta mig gärna om du av en liten slump läser detta & och behöver hjälp med att förstå det.
Njut, 🙂
Detta inlägg publicerades ursprungligen HÄR.