Ik heb me ingeschreven voor het intensieve computer programmeer bootcamp, de Maker Academy, volgende maand. Om een voorsprong te krijgen dacht ik dat ik het boek Learn Ruby the Hard Way van Zed Shaw zou doornemen.

Oefening 25 lijkt mijn probleemoplossend vermogen te testen, dus ik dacht dat ik een bericht zou schrijven waarin ik documenteer hoe ik mijn foutmeldingen heb opgelost. Deze post is gericht op nieuwelingen in de programmeerwereld, omdat ik me kan voorstellen dat het zeer fundamentele dingen zijn die ik fout doe.

Dit was mijn eerste poging om het script van oefening 25 in mijn editor te schrijven:

Toen ik dit in de terminal uitvoerde kreeg ik de volgende foutmelding:

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

Het eerste wat ik deed was de foutmelding googelen.

De foutmelding oplossen met Google

Ik vond een antwoord op Stackoverflow.

Het vertelde me dat ik per ongeluk Alt + Space typte op mijn Mac, waardoor er een niet-afbrekende spatie ontstond. Dit wordt door Ruby beschouwd als onderdeel van een variabelenaam in tegenstelling tot de witruimte die het zou moeten zijn.

Het gaf twee oplossingen voor dit probleem:

1. 1. Alt + Space omzetten naar spatie om deze typfout te voorkomen.

2. Onzichtbare tekens markeren in de tekstverwerker om de typfouten onmiddellijk te herkennen.

De voorkeur leek uit te gaan naar oplossing 2, dus ik dacht dat ik het eerst op deze manier zou proberen. Het leek me het eenvoudigst en snelst op te lossen. Ik wilde het off-the-shelf probleem van mijn gebroken code uitsluiten.

Highlight onzichtbare tekens in mijn tekst editor – Deel 1

Naar aanleiding van mijn googlede ik hoe ik onzichtbare tekens kan highlighten met mijn tekst editor, Sublime Text editor 2.

Het blijkt dat dit een standaard functie van mijn tekst editor zou moeten zijn.

Telkens als ik tekst markeer, zou ik kleine witte puntjes moeten kunnen zien zoals in de afbeelding hieronder (kijk goed of ze er zijn in de lege ruimtes):

Dus ik markeerde de tekst en er gebeurde niets:

Ik heb besloten om het probleem van de ‘niet-brekende’ spaties voorlopig hier te parkeren en te proberen mijn foutmelding op een eenvoudiger manier op te lossen. Ik ben relatief nieuw met coderen, dus de volgende oplossing voor het vinden van ‘niet-afbrekende’ spaties; het aanpassen van de voorkeuren of standaard toetstoewijzingen in Sublime Text editor, leek niet de makkelijkste manier om mijn probleem op te lossen.

Googlen naar de oefening zelf

Het volgende wat ik deed was googlen op ‘Ex25 learn Ruby the hard way’ om te zien of iemand anders met dezelfde problemen kampte als ik. Ik vond een blog met de oefening uitgetypt. Ik vergeleek onze bestanden woord voor woord op mijn scherm.

Ik kon geen verschil zien tussen onze bestanden (wat aangeeft dat de verborgen niet-brekende spaties misschien de oorzaak zijn van mijn fout).

Hoewel ik het idee moest uitsluiten dat er ergens een typefout was die ik niet kon zien, dus typte ik het hele bestand opnieuw uit. Ik dacht dat dit een snellere manier was om tot de oplossing te komen.

Mijn tweede bestand werkte toen ik het in de terminal uitvoerde. Geen foutmelding.

Hier is het tweede bestand:

Ik was geïntrigeerd waar ik met het eerste bestand nog fout ging, dus ik vergeleek ze regel voor regel.

Vergelijk het werkende script met dat met een foutmelding

Vergelijk ze op mijn scherm en merkte twee verschillen op die ik een voor een heb opgelost.

1. Wanneer de eerdere functies in latere werden aangeroepen, bijv.

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

De functie ex25.break_word zag eruit alsof deze niet was herkend in het foutscript (rechts), terwijl Ex25. blauw verscheen in het andere script (links).

De meest voor de hand liggende reden die ik kon bedenken was dat de ‘e’ geen hoofdletter was. Dus veranderde ik alle Ex25’s in het kapotte script in een hoofdletter e.

Ik draaide het script maar kreeg nog steeds dezelfde foutmelding:

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

2. De volgende gemakkelijke oplossing die ik opmerkte was dat de bestandsnaam en de functienaam in het kapotte script hetzelfde waren, maar in mijn nieuwe script had ik het bestand de naam EX25b.rb.

Misschien was dit verschil in naamgeving verantwoordelijk voor de fout?

Nope ..

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

Als ik de hele oefening in Learning Ruby the Hard Way had gelezen, dan had ik gezien dat dit niet het antwoord was:

“De Ex25 module hoeft niet in een bestand met de naam ex25.rb te staan. Probeer het in een nieuw bestand te zetten met een willekeurige naam en importeer dat bestand dan en kijk hoe je Ex25 nog steeds beschikbaar hebt.”

Dus besloot ik terug te gaan naar de eerste oplossing, niet-brekende spaties, omdat ik nu alle makkelijke opties had uitgeput en ik geen enkel verschil meer kon zien tussen de fout en het correcte script.

Onzichtbare tekens in mijn tekstverwerker markeren- Deel 2

Ik heb hier gelezen hoe ik dat moet doen.

1. Open de ‘voorkeuren’ binnen Sublime text editor & selecteer ‘key bindings’.

2. Voeg in de linkerkant, het tabblad “gebruiker” de volgende code in:

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

3. Opgeslagen en vervolgens het originele (gebroken 🙁 )) bestand opnieuw geopend.

Zeker genoeg was er per ongeluk de Alt en spatiebalk niet-brekende spatie:

HALLELUJAH … dacht ik … Ik heb eindelijk mijn oude script gerepareerd…….

Ik heb het opnieuw uitgevoerd en ik had nog steeds dezelfde foutmelding!

Hier is waar ik waarschijnlijk had moeten denken:

“Ik heb het één keer goed gekregen en ik ben erin geslaagd om de oefening door te werken en het af te maken. Ik ga er gewoon mee stoppen en me geen zorgen maken over het bestand dat een foutmelding terugstuurt”.

Maar ik ben te nieuwsgierig / koppig om genoegen te nemen met het laten hangen van de fout boven mijn eerste script.

Ik heb irb in de terminal uitgevoerd.

Ik draaide het bestand dat ik goed had & het bestand met de foutmelding:

Ik probeerde uit te vinden wat het verschil was tussen de twee bestanden.

Misschien waren het de mappen waarin ze waren opgeslagen?

Ik heb het gecontroleerd en ja hoor, ze waren in verschillende mappen opgeslagen.

Dus heb ik het foutbestand in dezelfde map opgeslagen als het bestand dat werkte….

Ik zag geen verschil dus ik ….

Kopieerde en plakte de tekst van het werkende bestand naar het fout bestand.

Toen gebeurde er iets verschrikkelijks!

Beide bestanden stopten met werken!!!!

Dezelfde foutmelding verscheen voor het eerste bestand en nu gaf het werkbestand ‘false’ terug als ik het ‘vereiste’ met irb:

Mogelijke oorzaak van dit probleem:

Te veel bestanden met dezelfde of een gelijksoortige naam in dezelfde directory?

Ik heb alles verwijderd, op één na… En als bij toverslag ..

Het werkte !!!

Ik heb het werkscript voor Ex25 in de terminal gedraaid en de instructies opgevolgd over hoe irb te gebruiken om de functies aan te roepen.

Hier zijn mijn resultaten en mijn uitleg van wat er gebeurt:

Het juiste script voor Ex25

Het script uitvoeren in de commandoregel ‘irb’

Ik heb de punten gelabeld waar ik een beetje moest nadenken over hoe het werkte. Hier is mijn uitleg:

1. Print ‘wait’ omdat de functie werkt op de ‘words’ array die niet gesorteerd is. De gesorteerde array heet ‘sorted_words’.

2. Van de ‘Words’ array zijn de eerste en laatste (‘all’ en ‘wait’ ) waarden verschoven in de print functie.

3. Er wordt geprint op de ‘sorted_words’ array, niet op de ‘words’ array waar de waarden in ontbreken. Daarom staat ‘all’ nog steeds in de array.

4….Schijnt te ontbreken in het plaatje … Dus ik heb het toen duidelijk niet relevant geacht, daarom zal ik nu hetzelfde opnieuw doen..

5. Gebruik makend van de originele ‘sentence’ variabele en deze door de functie te halen. Het breekt deze zin variabele in een array elke keer als het een spatie tegenkomt. Dan gebruikt hij de functie Ex25.sort_words om deze array van woorden te sorteren.

6. Hij neemt de oorspronkelijke variabele ‘sentence’, breekt die in een array van woorden en drukt dan de eerste en de laatste waarde van die array af.

Zo, we zijn nu aan het einde gekomen van mijn worsteling met oefening 25 van Learn Ruby the Hard way. Ik hoop dat u genoten heeft van mijn higgledy piggldy probleemoplossing die uiteindelijk resulteerde in het verslaan van de foutmeldingen die gegeven werden bij het uitvoeren van mijn script. Neem contact met me op als je dit toevallig leest & hulp nodig hebt om het te begrijpen.

Geluk, 🙂

Dit bericht is oorspronkelijk HIER gepubliceerd.

Articles

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.