Ich habe mich für das intensive Computerprogrammier-Bootcamp, die Maker Academy, nächsten Monat angemeldet. Um mir einen Vorsprung zu verschaffen, dachte ich, ich würde das Buch Learn Ruby the Hard Way von Zed Shaw durcharbeiten.

Die Übung 25 scheint meine Problemlösungsfähigkeiten zu testen, also dachte ich, ich würde einen Beitrag schreiben, in dem ich dokumentiere, wie ich meine Fehlermeldungen herausgefunden und dann behoben habe. Dieser Beitrag richtet sich an Neulinge in der Welt der Programmierung, da ich vermute, dass es sich um sehr grundlegende Dinge handelt, die ich falsch mache.

Das war mein erster Versuch, das Skript der Übung 25 in meinem Editor zu schreiben:

Als ich das im Terminal ausführte, bekam ich folgende Fehlermeldung:

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

Das erste, was ich tat, war die Fehlermeldung zu googeln.

Lösung der Fehlermeldung mit Google

Ich fand eine Antwort auf Stackoverflow.

Es sagte mir, dass ich auf meinem Mac versehentlich Alt + Leertaste eingegeben habe, wodurch ein nicht umbrechendes Leerzeichen entstand. Dies wird von Ruby als Teil eines Variablennamens angesehen, im Gegensatz zu dem Leerzeichen, das es sein sollte.

Es gab zwei Lösungen für dieses Problem:

1. Alt + Leertaste in Leerzeichen umwandeln, damit der Tippfehler nicht mehr auftritt.

2. Unsichtbare Zeichen im Texteditor hervorheben, um den Tippfehler sofort zu erkennen.

Die Präferenz schien für Lösung 2 zu sein, also dachte ich, ich probiere es zuerst auf diese Weise. Sie schien mir am einfachsten und am schnellsten zu beheben zu sein. Ich wollte ausschließen, dass mein fehlerhafter Code von der Stange kommt.

Unsichtbare Zeichen in meinem Texteditor hervorheben – Teil 1

Als Nächstes habe ich gegoogelt, wie man mit meinem Texteditor, Sublime Text editor 2, unsichtbare Zeichen hervorheben kann.

Es stellte sich heraus, dass dies eine Standardfunktion meines Texteditors sein sollte.

Jedes Mal, wenn ich Text hervorhebe, sollte ich kleine weiße Punkte sehen können, wie auf dem Bild unten (schau genau hin, sie sind in den leeren Stellen):

So habe ich den Text hervorgehoben und nichts ist passiert:

Ich habe mich entschlossen, das Problem der „nicht umbrechenden“ Leerzeichen erst einmal hier zu parken und zu versuchen, meine Fehlermeldung auf einfachere Weise zu lösen. Ich bin relativ neu in der Programmierung, so dass die nächste Lösung für die Suche nach ’nicht-umbrechenden‘ Leerzeichen; die Festsetzung der Einstellungen oder Standard-Tastenzuweisungen in Sublime Text-Editor, schien nicht wie der einfachste Weg, um mein Problem zu lösen.

Googeln der Übung selbst

Das nächste, was ich tat, war google ‚Ex25 learn Ruby the hard way‘, um zu sehen, wenn jemand anderes hatte die gleichen Probleme wie ich war. Ich fand einen Blog, in dem die Übung abgetippt war. Ich verglich unsere Dateien Wort für Wort auf meinem Bildschirm.

Ich konnte keinen Unterschied zwischen unseren Dateien sehen (was darauf hindeutet, dass die versteckten nicht umbrechenden Leerzeichen die Ursache für meinen Fehler sein könnten).

Allerdings musste ich ausschließen, dass es irgendwo einen Tippfehler gab, den ich nicht erkennen konnte, also tippte ich die gesamte Datei noch einmal ab. Ich dachte, so käme ich schneller zur Lösung.

Meine zweite Datei funktionierte, als ich sie im Terminal ausführte. Keine Fehlermeldung.

Hier ist die zweite Datei:

Ich war neugierig, wo ich mit der ersten Datei noch falsch lag, also verglich ich sie Zeile für Zeile.

Vergleiche das funktionierende Skript mit dem mit einer Fehlermeldung

Vergleiche sie auf meinem Bildschirm und stelle zwei Unterschiede fest, die ich nacheinander behoben habe.

1. Wenn die früheren Funktionen in späteren aufgerufen wurden, z. B.

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

Die Funktion ex25.break_word sah aus, als sei sie im Fehlerskript (rechts) nicht erkannt worden, während die Ex25. im anderen Skript (links) blau erschien.

Der offensichtlichste Grund, der mir einfiel, war, dass das ‚e‘ nicht großgeschrieben wurde. Also änderte ich alle Ex25 im kaputten Skript in ein großgeschriebenes e.

Ich führte das Skript aus, erhielt aber immer noch die gleiche Fehlermeldung:

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

2. Die nächste einfache Lösung, die ich bemerkte, war, dass der Dateiname und der Funktionsname im kaputten Skript gleich waren, aber in meinem neuen Skript hatte ich die Datei EX25b.rb.

Vielleicht war dieser Unterschied in der Namensgebung für den Fehler verantwortlich?

Nein ..

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

Hätte ich die gesamte Übung in Learning Ruby the Hard Way gelesen, hätte ich gesehen, dass dies nicht die Antwort war:

„Das Ex25-Modul muss nicht in einer Datei namens ex25.rb stehen. Versuchen Sie, es in eine neue Datei mit einem zufälligen Namen zu packen und importieren Sie diese Datei, um zu sehen, ob Ex25 noch verfügbar ist.“

So beschloss ich, zur ersten Lösung zurückzukehren, dem nicht umbrechenden Leerzeichen, da ich nun die einfachen Möglichkeiten ausgeschöpft hatte und beim besten Willen keinen Unterschied zwischen dem Fehler und dem richtigen Skript erkennen konnte.

Unsichtbare Zeichen in meinem Texteditor hervorheben – Teil 2

Ich habe hier gelesen, wie man das macht.

1. Öffne die ‚Einstellungen‘ im Sublime Texteditor & wähle ‚Tastaturbelegung‘.

2. Fügen Sie auf der linken Seite in der Registerkarte „Benutzer“ den folgenden Code ein:

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

3. Gespeichert und dann die ursprüngliche (kaputte 🙁 ) Datei wieder geöffnet.

Sicherlich gab es das versehentliche Alt und Leertaste nicht unterbrechende Leerzeichen:

HALLELUJAH .. dachte ich. Ich habe endlich mein altes Skript repariert…….

Ich habe es noch einmal laufen lassen und ich hatte immer noch die gleiche Fehlermeldung!

Hier hätte ich wahrscheinlich denken sollen:

„Ich habe es einmal richtig gemacht und habe es geschafft, die Übung durchzuarbeiten und abzuschließen. Aber ich bin zu neugierig / stur, um mich damit zu begnügen, dass der Fehler über meinem ersten Skript hängen bleibt.

Ich habe irb im Terminal ausgeführt.

Ich ließ die Datei, die ich korrekt bekommen hatte, noch einmal laufen & die Datei mit der Fehlermeldung:

Ich versuchte herauszufinden, was der Unterschied zwischen den beiden Dateien war.

Vielleicht lag es an den Verzeichnissen, in denen sie gespeichert waren?

Ich überprüfte das und siehe da, sie waren in verschiedenen Verzeichnissen gespeichert.

Also speicherte ich die Fehlerdatei in demselben Verzeichnis wie die Datei, die funktionierte….

Ich konnte keinen anderen Unterschied feststellen, also habe ich ….

Kopiert und den Text aus der funktionierenden Datei in die Fehlerdatei eingefügt.

Dann ist etwas Schreckliches passiert!

Beide Dateien funktionieren nicht mehr!!!!

Die gleiche Fehlermeldung erschien für die erste Datei und nun gab die Arbeitsdatei ‚false‘ zurück, wenn ich sie mit irb ‚anforderte‘:

Mögliche Ursache für dieses Problem:

Zu viele Dateien mit dem gleichen oder einem ähnlichen Namen im gleichen Verzeichnis?

Ich löschte alle bis auf eine… Und wie von Zauberhand…

Es funktionierte!!!

Ich führte das Arbeitsskript für Ex25 im Terminal aus und folgte den Anweisungen, wie man irb zum Aufrufen seiner Funktionen verwendet.

Hier sind meine Ergebnisse und meine Erklärung, was passiert:

Das richtige Skript für Ex25

Das Skript in der Kommandozeile ausführen ‚irb‘

Ich habe die Punkte gekennzeichnet, bei denen ich ein wenig nachdenken musste, wie es funktioniert. Hier ist meine Erklärung:

1. Druckt ‚wait‘, weil die Funktion auf das Array ‚words‘ wirkt, das nicht sortiert ist. Das sortierte Array heißt ’sorted_words‘.

2. Im Array ‚Words‘ wurden der erste und der letzte Wert (‚all‘ und ‚wait‘ ) in der Druckfunktion verschoben.

3. Der Aufruf erfolgt auf dem Array ’sorted_words‘, nicht auf dem Array ‚words‘, das die fehlenden Werte hat. Daher ist ‚all‘ immer noch im Array.

4….Scheint auf dem Bild zu fehlen … Ich habe es damals eindeutig für irrelevant gehalten, daher werde ich das Gleiche jetzt noch einmal tun.

5. Ich verwende die ursprüngliche „Satz“-Variable und übergebe diese durch die Funktion. Sie zerlegt diese Satzvariable jedes Mal in ein Array, wenn sie auf ein Leerzeichen trifft. Dann wird die Funktion Ex25.sort_words verwendet, um dieses Array von Wörtern zu sortieren.

6. Sie nimmt die ursprüngliche Variable ’sentence‘, zerlegt sie in ein Array von Wörtern und gibt dann den ersten und den letzten Wert dieses Arrays aus.

So, wir sind nun am Ende meines Kampfes mit Übung 25 von Learn Ruby the Hard way angelangt. Ich hoffe, Sie hatten Spaß und fanden meine higgledy piggldy Problemlösung nützlich, die schließlich dazu führte, dass ich die Fehlermeldungen beim Ausführen meines Skripts überwand. Bitte kontaktieren Sie mich, wenn Sie durch einen kleinen Zufall dies lesen & und Hilfe brauchen, um es zu verstehen.

Viel Spaß, 🙂

Dieser Beitrag wurde ursprünglich HIER veröffentlicht.

Articles

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.