InPlace Array.eachMan stelle sich vor, in einem Array sind eine Reihe von Strings, denen alle die ersten beiden Buchstaben weggeschnitten werden sollen. Dafür braucht man kein neues Ziel-Array zu erzeugen sondern kann das InPlace machen. Der Trick ist, String#replace zu verwenden.
Würde man es mit "s = s[2..-1]" versuchen, so weist man s ein neues String-Objekt zu. Was man aber will: Das Objekt verändern, worauf s gerade zeigt. Denn das ist genau das Objekt, worauf auch im Array referenziert wird. Man muss dieses Objekt verändern und dafür gibt es nur recht wenige Möglichkeiten. Eine davon ist replace, eine andere ist "<<". Andersherum muss man aufpassen, dass man nicht Elemente des Array verändert, obwohl man das gar nicht wollte. Hier ein Beispiel:
Ruby Format StringsJeder kennt & kann sie: String-Substitution per #{}. Oft vergessen wird aber dass auch in Ruby ein (s)printf existiert. Jedoch ist dies nicht in der Klasse String zu finden, sondern im Kernel-Modul. String ueberlaedt allerdings freundlicherweise den %-Operator. In Aktion sieht das ganze dann so aus:
(Mit dank an murphy für den Code) Eine komplette Referenz findet man hier: Kernel#sprintf Library or Main Program?Man hat ein Ruby-Programm komplettiert und will die selbst definierten Klassen und Methoden auch in einem anderen Programm nutzen. Wenn man die Datei nun einfach lädt, will man die Aufrufe für das erste Programm nicht ausführen, sondern nur die Methoden und Klassen nutzen. Um Anweisungen nur auszuführen, wenn die aktuelle Datei auch das Main Program ist, sollte man diese daher besonders "klammern":
Zweidimensionales Array -> HashOft liest man die Frage "Wie kann ich ein Array in ein Hash umwandeln?" oder "Wieso gibt's kein Array#to_h?". Nunja, nicht jedes Array erfüllt die Kriterien, um verlustfrei in ein Hash umgewandelt zu werden. Wenn man sich dessen aber sicher ist, gibt es folgenden, einfachen Weg:
Tiefer Klon von ObjektstrukturenWenn man einen tiefen Klon von einem Objekt erstellen möchte und sich nicht selbst durch die Struktur hangeln will, gibt es zwei Tricks:
Daten an Coding anhängenHat man ein Skript, das zusätzlich zu dem Programmcode Daten benötigt, so kann man diese an das Coding nach Beispiel:
Wenn man DATA allerdings auf die Position 0 setzt, ist die Cursorpos am Anfang des Programms:
Zahlen mit bestimmter Anzahl Nachkommastellen oder Nullen davor anzeigenWeder String noch Integer bieten eine direkte Möglichkeiten Zahlen auf diese Art und Weise darzustellen. Man kann das aber über Kernel#sprintf, also über Format-Strings lösen.
Externe Programme startenRuby bietet mehrere Möglichkeiten, andere Programme zu starten, auch wenn diese nicht in Ruby geschrieben sind. Folgendes ist möglich:
Siehe auch |
|||||||||||||||||||||||||||||||||