Sunt înscris luna viitoare la tabăra intensivă de programare pe calculator, Maker Academy. Pentru a avea un avans, m-am gândit să lucrez la cartea Learn Ruby the Hard Way a lui Zed Shaw.

Exercițiul 25 pare să-mi testeze abilitățile de rezolvare a problemelor, așa că m-am gândit să scriu o postare în care să documentez modul în care am rezolvat apoi am remediat mesajele de eroare. Această postare se adresează începătorilor în lumea programării deoarece îmi imaginez că sunt lucruri foarte elementare pe care le greșesc.

Aceasta a fost prima mea încercare de a scrie scriptul exercițiului 25 în editorul meu:

Când l-am rulat în terminal am primit următorul mesaj de eroare:

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

Primul lucru pe care l-am făcut a fost să caut pe Google mesajul de eroare.

Soluționarea mesajului de eroare cu ajutorul Google

Am găsit un răspuns pe Stackoverflow.

Mi-a spus că am tastat din greșeală Alt + Spațiu pe Mac-ul meu, creând astfel un spațiu neîntrerupt. Acesta este considerat de Ruby ca fiind parte a unui nume de variabilă, spre deosebire de spațiul alb care trebuia să fie.

A dat două soluții la această problemă:

1. Remapping Alt + Spațiu în spațiu pentru a opri apariția din nou a acestei greșeli de scriere.

2. Evidențierea caracterelor invizibile în editorul de text pentru a realiza imediat greșelile de scriere.

Preferința părea să fie pentru soluția 2, așa că m-am gândit să încerc mai întâi acest mod. Mi s-a părut cea mai simplă și rapidă de rezolvat. Am vrut să exclud problema de pe raft pentru codul meu stricat.

Sublinificarea caracterelor invizibile în editorul meu de text – Partea 1

Apoi am căutat pe Google cum să evidențiez caracterele invizibile cu editorul meu de text, Sublime Text editor 2.

Se pare că aceasta ar trebui să fie o caracteristică implicită a editorului meu de text.

De fiecare dată când evidențiez un text ar trebui să pot vedea mici puncte albe ca în imaginea de mai jos (priviți cu atenție, ele sunt acolo în spațiile goale):

Așa că am evidențiat textul și nu s-a întâmplat nimic:

Am hotărât să parchez aici deocamdată problema spațiilor „neîntrerupte” și să încerc să-mi rezolv mesajul de eroare într-un mod mai simplu. Sunt relativ nou în domeniul codării, așa că următoarea soluție pentru a găsi spații „fără spații întrerupte”; fixarea preferințelor sau atribuirea implicită a tastelor în editorul Sublime Text, nu părea a fi cea mai ușoară cale de a-mi rezolva problema.

Cercetarea pe Google a exercițiului în sine

Următorul lucru pe care l-am făcut a fost să caut pe Google „Ex25 learn Ruby the hard way” pentru a vedea dacă altcineva avea aceleași probleme ca și mine. Am găsit un blog cu exercițiul tipărit. Am comparat fișierele noastre cuvânt cu cuvânt pe ecranul meu.

Nu am putut VEDE nicio diferență între fișierele noastre (ceea ce indică faptul că spațiile de neîntrerupere ascunse ar putea fi ceea ce cauzează eroarea mea).

Cu toate acestea, trebuia să exclud ideea că există o greșeală de scriere pe care nu am putut-o identifica undeva, așa că am tastat din nou întregul fișier. Gândindu-mă că aceasta era o modalitate mai rapidă de a ajunge la soluție.

Cel de-al doilea fișier a funcționat când l-am rulat în terminal. Niciun mesaj de eroare.

Iată al doilea fișier:

Eram intrigat unde am greșit cu primul fișier încă, așa că le-am comparat linie cu linie.

Comparând scriptul de lucru cu cel cu mesaj de eroare

Le-am comparat pe ecranul meu și am observat două diferențe pe care le-am corectat pe rând.

1. Când funcțiile anterioare au fost apelate în cele ulterioare, de exemplu.

def ex25.print_first_and_last(sentence)
words = ex25.break_word .. etc

Funcția ex25.break_word părea că nu a fost recunoscută în scriptul de eroare (cel din dreapta), în timp ce Ex25. apărea albastră în celălalt script (cel din stânga).

Motivul cel mai evident pe care l-am putut găsi a fost că „e” nu era scris cu majuscule. Așa că am schimbat toate Ex25-urile din scriptul stricat cu un e cu majusculă.

Am rulat scriptul, dar tot am primit același mesaj de eroare:

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

2. Următoarea remediere ușoară pe care am observat-o a fost că numele fișierului și numele funcției din scriptul stricat erau aceleași, dar în noul meu script am numit fișierul EX25b.rb.

Poate că această diferență de denumire a fost responsabilă pentru eroare?

Nu ..

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

Dacă aș fi citit întregul exercițiu din Learning Ruby the Hard Way aș fi văzut că acesta nu era răspunsul:

„Modulul Ex25 nu trebuie să fie într-un fișier numit ex25.rb. Încercați să-l puneți într-un fișier nou cu un nume aleatoriu, apoi importați acel fișier și vedeți cum aveți în continuare Ex25 disponibil.”

Așa că am decis să mă întorc la prima soluție, spațiu fără întrerupere, deoarece acum epuizasem opțiunile ușoare și nu puteam, pentru viața mea, să văd nicio diferență între eroare sau scriptul corect.

Subliniați caracterele invizibile în editorul meu de text- Partea 2

Am citit cum se face acest lucru aici.

1. Deschideți ‘preferințele’ din cadrul editorului de text Sublime & selectați ‘key bindings’.

2. Introduceți în partea stângă, în fila „user”, următorul cod:

{
"keys": ,
"command": "insert_snippet",
"args": {"contents": " "}
}

3. Am salvat apoi am redeschis fișierul original (stricat 🙁 ).

Sigur că a existat un spațiu de neîntrerupere accidental Alt și bara de spațiu:

HALLELUJAH .. m-am gândit… Am reparat în sfârșit vechiul meu script…….

L-am rulat din nou și am avut ÎNCĂ același mesaj de eroare!

Aici este locul unde probabil ar fi trebuit să mă gândesc:

„Am corectat o dată și am reușit să lucrez la exercițiu și să-l termin. Voi încheia ziua și nu-mi voi mai face griji cu privire la fișierul care returnează un mesaj de eroare.”.

Dar sunt prea curios / încăpățânat pentru a mă mulțumi să las eroarea să planeze asupra primului meu script.

Am rulat irb în terminal.

Am rulat din nou fișierul pe care îl aveam corect & fișierul cu mesajul de eroare:

Am încercat să-mi dau seama care este diferența dintre cele două fișiere.

Poate că era vorba de directoarele în care au fost salvate?

Am verificat și sigur că au fost salvate în directoare diferite.

Așa că am salvat fișierul de eroare în același director ca și fișierul care a funcționat…. ÎNTOTDEAUNA mesajul de eroare!

Nu vedeam nicio altă diferență așa că am ….

Copiat și lipit textul din fișierul care funcționa în fișierul de eroare.

Apoi s-a întâmplat ceva teribil!

Ambele fișiere au încetat să mai funcționeze!!!!

Aceeași mesaj de eroare a apărut pentru primul fișier și acum fișierul de lucru returna ‘false’ când îl ‘ceream’ cu irb:

Cauza posibilă a acestei probleme:

Prea multe fișiere cu același nume sau cu nume similar în același director?

Le-am șters pe toate, mai puțin unul… Și ca prin minune…

A funcționat !!!

Am rulat scriptul de lucru pentru Ex25 în terminal și am urmat instrucțiunile despre cum să folosesc irb pentru a apela funcțiile sale.

Aici sunt rezultatele mele și explicația mea a ceea ce se întâmplă:

Scriptul corect pentru Ex25

Executarea scriptului în linia de comandă. ‘irb’

Am etichetat punctele în care a trebuit să mă gândesc puțin la modul în care funcționa. Iată explicația mea:

1. Se tipărește ‘wait’ pentru că funcția acționează asupra array-ului ‘words’ care nu este sortat. Matricea sortată se numește ‘cuvinte_orânduite’.

2. Matricea ‘cuvinte’ a avut primele și ultimele valori („all” și „wait” ) decalate în funcția de tipărire.

3. Apelează la matricea ‘cuvinte_orânduite’, nu la matricea ‘cuvinte’ care are valorile lipsă. Prin urmare, ‘all’ este încă în array.

4….Se pare că lipsește din imagine … Așa că am considerat în mod clar că este irelevant atunci, prin urmare, voi face același lucru din nou acum..

5. Folosind variabila originală „sentence” și trecând aceasta prin funcție. Aceasta rupe această variabilă „sentence” într-o matrice de fiecare dată când întâlnește un spațiu. Apoi, folosind funcția Ex25.sort_words pentru a sorta această matrice de cuvinte.

6. Se ia variabila originală ‘sentence’, o sparge într-o matrice de cuvinte, apoi se tipărește prima și ultima valoare din acea matrice.

Acum am ajuns la sfârșitul luptei mele cu exercițiul 25 din Learn Ruby the Hard way. Sper că v-ați bucurat și ați găsit utilă rezolvarea problemelor mele higgledy piggldy, care în cele din urmă a avut ca rezultat faptul că am învins mesajele de eroare date de rularea scriptului meu. Vă rog să mă contactați dacă, printr-o mică șansă, citiți acest & aveți nevoie de ajutor pentru a-l înțelege.

Distracție plăcută, 🙂

Acest post a fost publicat inițial AICI.

.

Articles

Lasă un răspuns

Adresa ta de email nu va fi publicată.