A jövő hónapban beiratkoztam egy intenzív számítógépes programozási bootcampre, a Maker Academy-re. Hogy egy kis előnyt szerezzek, úgy gondoltam, végigdolgozom Zed Shaw Learn Ruby the Hard Way című könyvét.

A 25. gyakorlat úgy tűnik, hogy teszteli a problémamegoldó készségeimet, ezért gondoltam, írok egy bejegyzést, amiben dokumentálom, hogyan dolgoztam ki, majd javítottam a hibaüzeneteimet. Ez a bejegyzés célja az újoncok számára a programozás világában, mivel úgy képzelem, hogy nagyon alapvető dolgok, amelyeket én kapok rosszul.

Ez volt az első kísérletem a 25. gyakorlat szkriptjének megírására a szerkesztőmben:

Amikor ezt lefuttattam a terminálban, a következő hibaüzenetet kaptam:

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

Az első dolgom az volt, hogy meggugliztam a hibaüzenetet.

A hibaüzenet megoldása a Google segítségével

A Stackoverflow-n találtam egy választ.

Ez azt mondta, hogy véletlenül Alt + Space-t írtam be a Mac-emen, ezért nem törőjeles szóközt hoztam létre. Ezt a Ruby a változó nevének részének tekinti, szemben a tervezett szóközzel.

Ez két megoldást adott a problémára:

1. Az Alt + Space átképzése szóközre, hogy ez a gépelési hiba ne fordulhasson elő többé.

2. Láthatatlan karakterek kiemelése a szövegszerkesztőben, hogy azonnal észrevegyük a gépelési hibát.

Az előnyben részesített megoldásnak tűnt a 2. megoldás, ezért gondoltam, először ezt próbálom ki. Ez tűnt a legegyszerűbbnek és leggyorsabban javíthatónak. Ki akartam zárni az elrontott kódomhoz tartozó off-the-shelf problémát.

Láthatatlan karakterek kiemelése a szövegszerkesztőmben – 1. rész

Következőnek azt gugliztam, hogyan lehet a láthatatlan karaktereket kiemelni a szövegszerkesztőmmel, a Sublime Text editor 2-vel.

Kiderült, hogy ennek a szövegszerkesztőm alapértelmezett funkciójának kellene lennie.

Minden alkalommal, amikor szöveget jelölök ki, az alábbi képhez hasonló kis fehér pöttyöket kellene látnom (nézd meg jól, hogy ott vannak az üres helyeken):

Szóval kiemeltem a szöveget, de semmi sem történt:

Úgy döntöttem, hogy a “nem törő” szóközök problémáját egyelőre itt parkolom, és megpróbálom egyszerűbb módon megoldani a hibaüzenetemet. Viszonylag új vagyok a kódolásban, így a következő megoldás a “nem törő” szóközök megtalálására; a beállítások vagy az alapértelmezett billentyűkiosztások javítása a Sublime Text szerkesztőben, nem tűnt a legegyszerűbb megoldásnak a problémám megoldására.

Guglizva magát a feladatot

A következő dolog, amit tettem, az volt, hogy a Google “Ex25 learn Ruby the hard way”, hogy lássam, ha valaki másnak is ugyanazok a problémái voltak, mint nekem. Találtam egy blogot a gyakorlatot begépelve. Összehasonlítottam a fájljainkat szóról szóra a képernyőmön.

Nem láttam különbséget a fájljaink között (jelezve, hogy a rejtett nem törőjeles szóközök okozhatják a hibámat).

Mégis ki kellett zárnom az ötletet, hogy volt egy elírás, amit nem tudtam valahol észrevenni, ezért újra begépeltem az egész fájlt. Úgy gondoltam, hogy így gyorsabban eljutok a megoldáshoz.

A második fájlom működött, amikor lefuttattam a terminálban. Nincs hibaüzenet.

Itt a második fájl:

Az érdekelt, hol rontottam el az első fájlban még mindig, ezért sorra összehasonlítottam őket.

A működő szkriptet összehasonlítva a hibaüzenettel

összehasonlítottam őket a képernyőmön, és két különbséget vettem észre, amelyeket egyesével kijavítottam.

1. Amikor a korábbi függvényeket meghívták a későbbi függvényekben pl.

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

Az ex25.break_word függvény úgy nézett ki, mintha nem ismerték volna fel a hibaszkriptben (a jobb oldali), míg az Ex25. a másik szkriptben (bal oldali) kékkel jelent meg.

A legnyilvánvalóbb ok, ami eszembe jutott, hogy az ‘e’ nem volt nagybetűs. Ezért a hibás szkriptben az összes Ex25-öt nagybetűs e-re változtattam.

Futtattam a szkriptet, de még mindig ugyanazt a hibaüzenetet kaptam:

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

2. A következő egyszerű javítás, amit észrevettem, az volt, hogy a fájlnév és a funkció neve a törött szkriptben ugyanaz volt, de az új szkriptemben EX25b-nek neveztem el a fájlt.rb.

Talán ez az elnevezésbeli különbség volt a hiba oka?

Nem..

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

Ha elolvastam volna a Ruby tanulás nehéz útja című könyv teljes gyakorlatát, akkor láttam volna, hogy nem ez a válasz:

“Az Ex25 modulnak nem kell az ex25.rb nevű fájlban lennie. Próbálja meg egy új fájlba helyezni egy véletlenszerű névvel, majd importálja ezt a fájlt, és nézze meg, hogy még mindig elérhető az Ex25.”

Így úgy döntöttem, hogy visszatérek az első megoldáshoz, a nem törő szóközhöz, mivel már kimerítettem az egyszerű lehetőségeket, és az életem árán sem láttam különbséget a hiba és a helyes szkript között.

Highlight invisible characters in my text editor- Part 2

Itt olvastam, hogyan kell ezt csinálni.

1. Nyissa meg a Sublime szövegszerkesztőn belül a “beállításokat” & válassza ki a “billentyűkhöz kötöttségeket”.

2. Szúrja be a bal oldalra, a ‘user’ fülre a következő kódot:

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

3. Mentés, majd újra megnyitottam az eredeti (törött 🙁 ) fájlt.

Naná, hogy ott volt a véletlen Alt és a szóköz nem törő szóköz:

HALLELUJAH .. gondoltam… Végre megjavítottam a régi szkriptem…….

Újra lefuttattam, és még mindig ugyanazt a hibaüzenetet kaptam!

Itt van az a pont, ahol valószínűleg gondolkodnom kellett volna:

“Egyszer jól csináltam, és sikerült végigdolgozni a feladatot és befejezni. Egyszerűen befejezem, és nem aggódom a hibaüzenetet visszaadó fájl miatt.”

De túl kíváncsi / makacs vagyok ahhoz, hogy megelégedjek azzal, hogy a hiba az első szkriptem felett lógjon.

Futtattam az irb-t a terminálban.

Újra lefuttattam a helyesnek ítélt fájlt & a hibaüzenetet tartalmazó fájlt:

Megpróbáltam kitalálni, mi a különbség a két fájl között.

Mi lehet, hogy a könyvtárak, ahová mentették őket?

Ellenőriztem, és valóban különböző könyvtárakba mentettem őket.

Ezért a hibafájlt ugyanabba a könyvtárba mentettem, mint a működőképes fájlt….. Még mindig a hibaüzenet!!

Más különbséget nem láttam, ezért ….

Másoltam és beillesztettem a szöveget a működő fájlból a hibafájlba.

Ezután valami szörnyűség történt!

Mindkét fájl megszűnt működni!!!!.

Az első fájlnál ugyanez a hibaüzenet jelent meg, és most a munkafájl is “false”-t adott vissza, amikor irb-vel “igényeltem”:

A probléma lehetséges oka:

Túl sok azonos vagy hasonló nevű fájl van ugyanabban a könyvtárban?

Egy kivételével az összeset töröltem… És mint a varázslat ..

MŰKÖDÖTT !!!

Futtattam az Ex25 munkaszkriptjét a terminálban és követtem az utasításokat, hogyan kell használni az irb-t a funkciók hívásához.

Itt vannak az eredményeim és a magyarázatom arra, hogy mi történik:

A helyes szkript az Ex25 számára

A szkript futtatása a parancssorban. ‘irb’

Megjelöltem azokat a pontokat, ahol kicsit gondolkodnom kellett, hogy hogyan működik. Íme a magyarázatom:

1. Kiírja a ‘wait’ szót, mert a függvény a ‘words’ tömbre hat, ami nincs rendezve. A rendezett tömb neve ‘sorted_words’.

2. A ‘Words’ tömb első és utolsó (‘all’ és ‘wait’ ) értékei eltolódtak a print függvényben.

3. A ‘sorted_words’ tömbre hívja, nem a ‘words’ tömbre, amiben a hiányzó értékek vannak. Ezért az ‘all’ még mindig a tömbben van.

4….Úgy tűnik, hogy hiányzik a képből … Így egyértelműen irrelevánsnak ítéltem akkor, ezért most újra megteszem ugyanezt..

5. Az eredeti ‘mondat’ változót használva és ezt átadva a függvényen keresztül. Ezt a mondat változót tömbre bontja minden alkalommal, amikor szóközzel találkozik. Majd az Ex25.sort_words függvényt használja ennek a szótömbnek a rendezésére.

6. Az eredeti ‘sentence’ változót veszi, szótömbre bontja, majd kiírja ennek a tömbnek az első és utolsó értékét.

Szóval most már a végére értünk a Learn Ruby the Hard way 25. feladatával való küzdelmemnek. Remélem, élvezték és hasznosnak találták a higgledy piggldy problémamegoldásomat, amely végül azt eredményezte, hogy legyőztem a szkriptem futtatásakor adott hibaüzeneteket. Kérem, forduljon hozzám, ha véletlenül ezt olvassa & segítségre van szüksége a megértéséhez.

Kellemes szórakozást, 🙂

Ez a bejegyzés eredetileg ITT jelent meg.

Articles

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.