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.