Jag har anmält mig till det intensiva bootcampet för datorprogrammering, Maker Academy, nästa månad. För att få ett försprång tänkte jag att jag skulle arbeta mig igenom Zed Shaws bok Learn Ruby the Hard Way.

Övningsuppgift 25 verkar testa mina problemlösningsförmågor så jag tänkte att jag skulle skriva ett inlägg där jag dokumenterar hur jag arbetade fram och sedan rättade till mina felmeddelanden. Det här inlägget riktar sig till nybörjare i programmeringsvärlden eftersom jag kan tänka mig att det är mycket grundläggande saker som jag gör fel.

Detta var mitt första försök att skriva övningsuppgift 25:s script i min editor:

När jag körde detta i terminalen fick jag följande felmeddelande:

ex25.rb:2:in `<main>': undefined local variable or method `ex25' for main:Object (NameError)

Det första jag gjorde var att googla felmeddelandet.

Lösning av felmeddelandet med Google

Jag hittade ett svar på Stackoverflow.

Det berättade att jag råkade skriva Alt + Space på min Mac och att det därför skapades icke-brytande blanksteg. Detta betraktas av Ruby som en del av ett variabelnamn i motsats till det vitrymdsutrymme som det var tänkt att vara.

Det gav två lösningar på problemet:

1. Omvandla Alt + Space till space för att förhindra att detta stavfel uppstår igen.

2. Markera osynliga tecken i textredigeraren för att omedelbart inse stavfel.

Det verkade som om lösning 2 var att föredra, så jag tänkte att jag skulle försöka på detta sätt först. Det verkade vara det enklaste och snabbast att åtgärda. Jag ville utesluta att det var ett standardproblem till min trasiga kod.

Highlight invisible characters in my text editor – Part 1

Nästan googlade jag hur man markerar osynliga tecken med min textredigerare, Sublime Text editor 2.

Det visade sig att det här är tänkt att vara en standardfunktion i min textredigerare.

Varje gång jag markerar text ska jag kunna se små vita prickar som i bilden nedan (titta noga, de finns där i de tomma utrymmena):

Så jag markerade texten och ingenting hände:

Jag bestämde mig för att parkera problemet med ”icke-avbrytande” mellanslag här för tillfället och försöka lösa felmeddelandet på ett enklare sätt. Jag är relativt ny inom kodning så nästa lösning för att hitta ”icke-avbrytande” mellanslag; att fixa inställningarna eller standardtangenttilldelningen i Sublime Text-redigeraren, verkade inte vara det enklaste sättet att lösa mitt problem.

Googla själva övningen

Det nästa jag gjorde var att googla ”Ex25 learn Ruby the hard way” för att se om någon annan hade samma problem som jag. Jag hittade en blogg med övningen utskriven. Jag jämförde våra filer ord för ord på min skärm.

Jag kunde inte se någon skillnad mellan våra filer (vilket tyder på att de dolda icke-brytande mellanslag kan vara det som orsakar mitt fel).

Jag behövde dock utesluta att det fanns ett stavfel som jag inte kunde upptäcka någonstans, så jag skrev ut hela filen igen. Jag tänkte att detta var ett snabbare sätt att komma fram till lösningen.

Min andra fil fungerade när jag körde den i terminalen. Inget felmeddelande.

Här är den andra filen:

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.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras.