Olen ilmoittautunut intensiiviseen tietokoneohjelmoinnin bootcampiin, Maker Academyyn, ensi kuussa. Saadakseni etumatkaa ajattelin työskennellä läpi Zed Shaw’s Learn Ruby the Hard Way -kirjaa.

Harjoitus 25 näyttää testaavan ongelmanratkaisutaitojani, joten ajattelin kirjoittaa viestin, jossa dokumentoidaan, miten selvitin sitten korjasin virheilmoitukset. Tämä viesti on suunnattu vasta-alkajille ohjelmointimaailmaan, koska kuvittelen, että se on hyvin perustavanlaatuisia asioita, jotka saan väärin.

Tämä oli ensimmäinen yritykseni kirjoittaa harjoituksen 25 skripti editorissani:

Kun ajoin tämän terminaalissa, sain seuraavan virheilmoituksen:

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

Ensimmäisenä googlasin virheilmoituksen.

Virheilmoituksen ratkaiseminen Googlella

Löysin vastauksen Stackoverflow’sta.

Se kertoi minulle, että kirjoitin vahingossa Alt + välilyönti Macissani, ja näin ollen loin ei-taukoavan välilyönnin. Ruby pitää tätä osana muuttujan nimeä sen sijaan, että se olisi tarkoitettu välilyönniksi.

Se antoi kaksi ratkaisua tähän ongelmaan:

1. Alt + välilyönnin muuttaminen välilyönniksi estää tämän kirjoitusvirheen toistumisen.

2. Näkymättömien merkkien korostaminen tekstieditorissa, jotta kirjoitusvirheet huomataan heti.

Editorin suosikki näytti olevan ratkaisu 2, joten ajattelin kokeilla tätä tapaa ensin. Se tuntui yksinkertaisimmalta ja nopeimmin korjattavalta. Halusin sulkea pois off-the-shelf-ongelman rikkinäiseen koodiini.

Näkymättömien merkkien korostaminen tekstieditorissani – Osa 1

Seuraavaksi googlasin, miten korostan näkymättömät merkit tekstieditorillani, Sublime Text editor 2:lla.

Kiinni kävi, että tämän pitäisi olla oletusarvoisesti tekstieditorini ominaisuus.

Joka kerta kun korostan tekstiä minun pitäisi nähdä pieniä valkoisia pisteitä kuten alla olevassa kuvassa (katso tarkkaan ne ovat siellä tyhjissä kohdissa):

Korostin siis tekstiä eikä mitään tapahtunut:

Päätin parkkeerata ’ei-taukoavien’ välilyöntien ongelman tähän toistaiseksi ja yrittää ratkaista virheilmoitukseni helpommalla tavalla. Olen suhteellisen uusi koodaamisessa, joten seuraava ratkaisu ’ei-taukoavien’ välilyöntien löytämiseksi; Sublime Text -editorin asetusten tai oletusnäppäinmääritysten korjaaminen ei tuntunut helpoimmalta tavalta ratkaista ongelmaani.

Googletin itse harjoituksen

Seuraavaksi googlasin ’Ex25 oppii Rubya vaikealla tavalla’ nähdäkseni, oliko kenelläkään muulla samoja ongelmia kuin minulla. Löysin blogin, jossa harjoitus oli kirjoitettu. Vertailin tiedostojamme sanasta sanaan näytölläni.

En nähnyt mitään eroa tiedostojemme välillä (mikä osoittaa, että piilotetut katkomattomat välilyönnit saattavat aiheuttaa virheeni).

Minun piti kuitenkin sulkea pois ajatus siitä, että jossakin oli kirjoitusvirhe, jota en voinut havaita, joten kirjoitin koko tiedoston uudelleen. Ajattelin, että tämä oli nopeampi tapa päästä ratkaisuun.

Toinen tiedostoni toimi, kun ajoin sen terminaalissa. Ei virheilmoitusta.

Tässä on toinen tiedosto:

Olin utelias siitä, missä menin pieleen ensimmäisessä tiedostossa vielä, joten vertasin niitä rivi riviltä.

Vertailin toimivaa skriptiä siihen, jossa oli virheilmoitus

Vertailin niitä ruudulla ja huomasin kaksi eroa, jotka korjasin yksi kerrallaan.

1. Kun aiempia funktioita kutsuttiin myöhemmissä esim.

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

Ex25.break_word-funktio näytti siltä, että sitä ei oltu tunnistettu virheskriptissä (oikealla), kun taas Ex25. näytti siniseltä toisessa skriptissä (vasemmalla).

Yksiselitteisin syy, jonka pystyin keksimään, oli se, että ’e’ ei ollut kirjoitettu isolla. Niinpä muutin kaikki Ex25:t rikkinäisessä skriptissä isolla e:llä kirjoitetuiksi.

Ajoin skriptin, mutta sain edelleen saman virheilmoituksen:

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

2. Seuraava helppo korjaus, jonka huomasin, oli se, että tiedoston nimi ja funktion nimi rikkinäisessä skriptissä olivat samat, mutta uudessa skriptissäni olin nimennyt tiedoston EX25b.rb.

Mahdollisesti tämä ero nimeämisessä aiheutti virheen?

Ei ..

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

Jos olisin lukenut koko harjoituksen Learning Ruby the Hard Way -kirjassa, olisin nähnyt, että tämä ei ollut vastaus:

”Ex25-moduulin ei tarvitse olla tiedostossa nimeltä ex25.rb. Kokeile laittaa se uuteen tiedostoon satunnaisella nimellä ja tuo sitten tuo tiedosto ja katso, miten sinulla on edelleen Ex25 käytettävissä.”

Päädyin siis palaamaan ensimmäiseen ratkaisuun, ei-breaking spaceen, koska olin nyt käyttänyt kaikki helpot vaihtoehdot loppuun enkä nähnyt mitään eroa virheen ja oikean skriptin välillä.

Näkymättömien merkkien korostaminen tekstieditorissani- Osa 2

Luen täältä, miten tämä tehdään.

1. Avaa ’asetukset’ Sublime-tekstieditorissa & valitse ’näppäinsidonnaisuus’.

2. Lisää vasemmalle puolelle, välilehdelle ’user’ seuraava koodi:

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

3. Tallennin sitten uudelleen avasin alkuperäisen (rikkinäisen 🙁 ) tiedoston.

Tottakai siellä oli vahingossa Alt- ja välilyöntipainikkeella ei- katkaiseva välilyönti:

HALLELUJAH .. Ajattelin.. Olen vihdoin korjannut vanhan skriptini…….

Ajoin sen uudestaan ja sain edelleen saman virheilmoituksen!

Tässä kohtaa olisi varmaan pitänyt miettiä:

”Sain sen kerran oikein ja onnistuin työstämään harjoituksen läpi ja suorittamaan sen loppuun. Aion vain lopettaa ja olla huolehtimatta tiedostosta, joka palauttaa virheilmoituksen.”

Mutta olen liian utelias / itsepäinen tyytyäkseni siihen, että annan virheen vain roikkua ensimmäisen skriptini yllä.

Ajoin irb:n terminaalissa.

Juoksutin oikein saamani tiedoston uudelleen & tiedoston, jossa oli virheilmoitus:

Yritin selvittää, mitä eroa näillä kahdella tiedostolla oli.

Mahdollisesti se johtui hakemistoista, joihin ne oli tallennettu?

Tarkistin ja totta tosiaan ne oli tallennettu eri hakemistoihin.

Tallensin siis virhetiedoston samaan hakemistoon kuin tiedoston, joka toimi….. JATKUVASTI virheilmoitus!!

En nähnyt mitään muuta eroa, joten ….

Kopioin ja liimasin tekstin toimivasta tiedostosta virhetiedostoon.

Silloin tapahtui jotain kamalaa!

KUMMAT tiedostot lakkasivat toimimasta!!!!

Sama virheilmoitus ilmestyi ensimmäiseen tiedostoon ja nyt työskentelytiedosto palautti ’false’ kun ’vaadin’ sitä irb:llä:

Mahdollinen syy tähän ongelmaan:

Ylivoimaisesti monta samannimistä tai samannimistä tiedostoa samassa hakemistossa?

Poistin kaikki paitsi yhden… Ja kuin taikaiskusta ..

SIT WORKED !!!

Ajoin Ex25:n työkomentosarjan terminaalissa ja seurasin ohjeita siitä, miten irb:n avulla kutsutaan sen toimintoja.

Tässä ovat tulokseni ja selitykseni siitä, mitä tapahtuu:

Oikein skripti Ex25:lle

Skriptin ajaminen komentorivillä ’irb’

Olen merkinnyt kohdat, joissa jouduin vähän miettimään, miten se toimii. Tässä on selitykseni:

1. Tulostaa ’wait’, koska funktio vaikuttaa ’words’ -matriisiin, jota ei ole lajiteltu. Lajiteltua arraya kutsutaan nimellä ’sorted_words’.

2. ’Words’-matriisin ensimmäinen ja viimeinen (’all’ ja ’wait’ ) arvo on siirretty pois print-funktiossa.

3. Kutsutaan ’sorted_words’-matriisia, ei ’words’-matriisia, jossa on puuttuvat arvot. Siksi ’all’ on edelleen array:ssa.

4….Tuntuu puuttuvan kuvasta … Joten pidin sitä silloin selvästi epäolennaisena, siksi teen saman uudelleen nyt..

5. Käyttämällä alkuperäistä ’lause’-muuttujaa ja kuljettamalla tämä funktion läpi. Se hajottaa tämän lause-muuttujan matriisiksi aina kun se kohtaa välilyönnin. Sitten käyttää Ex25.sort_words-funktiota lajitellakseen tämän sanamäärän.

6. Se ottaa alkuperäisen muuttujan ’sentence’, hajottaa sen sanamääräksi ja tulostaa sitten tuon sanamäärän ensimmäisen ja viimeisen arvon.

Olemmekin nyt tulleet loppuun kamppailuni Learn Ruby the Hard way -kirjan harjoituksen 25 kanssa. Toivottavasti olette nauttineet ja pitäneet hyödyllisenä ongelmanratkaisuani, joka lopulta johti siihen, että voitin skriptini suorittamisesta annetut virheilmoitukset. Ole hyvä ja ota minuun yhteyttä, jos olet sattumalta lukemassa tätä & tarvitset apua sen ymmärtämisessä.

Iloa, 🙂

Tämä viesti julkaistiin alun perin TÄÄLLÄ.

Articles

Vastaa

Sähköpostiosoitettasi ei julkaista.