|
Du bist hier:
Hinterkattentuffel -
Ruby -
Metaprogrammierung Prev: Klassen definieren |
|
Ohne Programmierhintergrund und Begleitlektüre wäre das Ausprobieren von Ruby in der irb zum Scheitern verurteilt. In Ruby sind ein paar nützliche Funktionen eingebaut, die das Forscherherz höher schlagen lassen. Einen Einstiegspunkt bietet folgendes Kommando: Object.methods Einen besseren Überblick liefert die Sortierung des Ergebnisses. Man versuche etwa folgendes: Object.private_instance_methods.sort Dort findet man u. a. die eben definierte Funktion printPlaylist wieder. Neben der Klasse Object dürfte vor allem die Sammlung vorhandener Objekte, der sogenannte ObjectSpace von Interesse sein. Die Ausgabe des folgenden Codeschnipsels zeigt, dass irb auch ohne Import irgendwelcher Zusatzmodule bereits einige Klassen kennt: ObjectSpace.each_object(Class) { |c| printf("%s\n", c.to_s) } Wer ausreichend kreativ ist, wird schnell weiter fündig:
IRB> Object.class Class ist die Klasse einer Klasse. (Man könnte auch sagen, eine Metaklasse.) Und es gibt noch mehr Spezialklassen, nämlich mindestens noch NilClass und Module. Metaprogrammierung hilft mir vor allem bei der Fehlersuche. Man kann z. B. ausgeben lassen, wie der Interpreter eine bestimmten Stelle im Code abarbeitet. Dazu benenne man die Datei mydebug.rb.txt in mydebug.rb um und bette sie wie folgt in den eigenen Code ein: require 'mydebug' beginTrace eigener Code endTrace Mit beginTrace startet die Ausgabe von Trace-Informationen auf die Diagnoseausgabe $stderr. Die Diagnoseausgabe lässt sich in eine Datei umlenken: CMD>ruby meinProgramm.rb 2>xxx.txt Die zusätzlichen Ausgaben landen nun in der Datei xxx.txt. Eigentlich bräuchte es an dieser Stelle noch einen Exkurs: "Metaprogrammierung für Fortgeschrittene.". Ruby stellt nämlich eine Menge Methoden bereit, mit denen sich Klassen und Objekte dynamisch verändern lassen. Bevor man das exzessiv betreibt, sollte man jedoch schon ein wenig sattelfest in den statischen Programmiertechniken sein. |
| Next: Interaktive Ruby Referenz ri |