Also, ich wusste schon, dass man folgendes schreiben kann, um Methoden mit beliebig vielen Argumenten zu definieren:
1 2 3 4 |
def bist_du_aber_klein(*) super essen(:vitamine) end |
Hier werden die restlichen Argumente einfach verworfen, und keiner lokalen Variable zugewiesen.
Der Stern kann auch noch in anderen Beziehungen auftauchen, zum Beispiel in Mehrfachzuweisungen oder bei Blockparametern:
1 2 |
gewinner, *nieten = die_anderen_gehen_leer_aus
array_von_arrays { |erstes, zweites, *rest| puts 'Was für ein Wetter!' } |
Interessanterweise kann man bei solchen Catch-all-Ausdrücken immer den Namen der Variable weglassen:
1 2 3 4 5 6 |
def gibs_mir *; end ja, * = nein, nein, nein obfusc do |*| end for key, * in ENV # puts(*) geht aber nicht! end |
In Ruby 1.9 geht auch:
1 2 3 4 5 6 7 |
a, *, b = *1..10 [a, b] #=> [1, 10] def letzter(*, last) last end letzter(*1..10) #=> 10 ENV.each.with_index { |(*, value), index| puts '%2d: %s' % [index, value] } |
Noch ein ganz extremes Beispiel, das nichts sinnvolles tut:
def***;%****%**;end;*a=*(a**a);b{|*|* =:*.*(:**)} |
Nützlich? Albern? Perl6? Eure Meinung!
Frohes neues Jahr :)
Die erste neue Version von CodeRay seit zwei Jahren ist endlich fertig.
CodeRay ist eine Ruby-Bibliothek zum Syntax-Highlighting. Sie ist komplett in Ruby geschrieben und sehr schnell.

Neuigkeiten:
gem install coderay
(Deutsche Übersetzung; Original auf murfy.de.)
Ich bin gerade dabei, den Java Scanner für CodeRay (Ticket #42 ^^) zu schreiben, und dachte, es wäre nett, eine Liste von eingebauten Typen zu haben, um sie hervorzuheben – wie String oder IllegalStateException. Ich wusste, dass TextMate recht gute Unterstützung für Java bietet, also schaute ich mir das Bundle genauer an.
Tatsächlich, irgendein schlauer Kerl hat dort einen ziemlich langen regulären Ausdruck in die Tokendefinitionen geschrieben:
support-type-built-ins-java = {
name = 'support.type.built-ins.java';
match = '\b(R(GBImageFilter|MI(S(ocketFactory|e(curity(Manager|Exception)|
rver(SocketFactory|Impl(_Stub)?)?))|C(onnect(ion(Impl(_Stub)?)?|
or(Server)?)|l(ientSocketFactory|assLoader(Spi)?))|IIOPServerImpl|
JRMPServerImpl|FailureHandler)|SA(MultiPrimePrivateCrtKey(Spec)?|
...und so weiter über mehrere Bildschirmseiten...Offenbar haben sie eine lange Liste von Typen in eine minimale Regexp umgewandelt, sicher mit Hilfe eine Scripts. Das war nicht ganz das, wonach ich gesucht hatte. Wie komme ich jetzt an die ursprüngliche Liste?
Zucker für Syntax-Spielkinder, diesmal:
Ruby-Mine präsentiert lustige Kommas am Ende von Methodendefinitionen.
Nein, keine Litschi, sondern ein weiteres interessantes Detail der Ruby-Syntax.
Wie gehabt: Ruby 1.8.6 vs. Ruby 1.9.0.
Leider noch ohne Rails, da die Tests noch nicht laufen.
Veränderungen bei Ruby 1.9 gegenüber Ende Oktober:
Ansonsten erstaunlich wenig Bewegung.
Da Fragen aufgetaucht sind, beleuchten wir das neue Feature von Ruby 1.9 mal genauer. Nehmen wir uns eine Funktion, die alle möglichen Arten von Argumenten hat:
def foo(a, b = :default1, c = :default2, *d, e, &f) [a, b, c, d, e, f] end
Tja, jetzt ist Ruby aus den Top 10 geflogen – überholt von JavaScript und Delphi. So ziemlich jede Sprache scheint im Dezember zugelegt zu haben, mit großen Sprüngen. Zwar ist Python Sprache des Jahres geworden, aber auch die TIOBE-Kommentatoren wissen nicht genau, woher der Aufwind kam. Und die Vermutung, dass Python 2008 weiter an Beliebtheit gewinnen wird, ist sicher richtig.
Was passiert auf der Ruby-Seite?
rake19 – das ist der Befehl, der in meinem Edge-Rails-Verzeichnis die Tests für Ruby 1.9.0 laufen lässt.
So sieht die Ausgabe der Tests gegen Revision 8514 + ein paar Patches von mir zur Zeit unter Mac OS X 10.5 aus:
unexpected aliasing, den bekomme ich auch mit Ruby 1.8.Also: Wenn ko1 den blöden module_eval-bug noch fixt, kann es eigentlich losgehen ;)
Neugierige können sich den Patch herunterladen und selber testen. Oder einfach noch ein wenig warten.
Update 2008-01-07: Nichts neues :(.
Matz ist vorbeigekommen und er hat uns etwas mitgebracht! Einen funkelnden Rubin mit der Aufschrift 1.9.0
Nun höre ich schon die ersten Leute grummeln:
Schon wieder ein neues Release? Es gab doch gerade mal vor knapp 7 Monaten die 1.8.6, sollte diese Version nicht überings 1.9.1 heißen und 0.0.4 Versionspunkte sind ja auch nicht gerade viel. ALLES DOOF!!".Diese Leute irren sich! Die 0.0.4 Versionspunkte haben es in sich.
Jawohl :)
class Feeling def ~ p :drunk end def ! p :alert end def -@ p :bad end def +@ p :good end end feeling = Feeling.new -feeling # => :bad +feeling # => :good !feeling # => :alert ~feeling # => :drunk # >> :bad # >> :good # >> :alert # >> :drunk
Der Fachmann/Die Fachmassaigiraffe sieht hier mehrere Dinge:
p gibt seine Argumente nicht nur aus, sondern auch zurück (statt nil.)matz sagt:
For good news, I have no big change left.
Nine? Doch!
Nur für’s Protokoll: Ruby ist jetzt auf Platz 9 vor JavaScript und direct hinter C#. Und das, obwohl auch JavaScript immer populärer wird. Wenn jetzt noch Lua und D statt Perl und C++ in die Top 10 aufsteigen, ist die Welt doch beinahe in Ordnung ^^
Werden diese Raubkatzen nicht irgendwann zu fett, um Langhörner zu fangen?
Was soll’s. Mac OS 10.5 hat Rails eingebaut:
Ruby on Rails
Work in a developer’s dreamland. Leopard is the perfect platform for Ruby on Rails development, with Rails, Mongrel, and Capistrano built in.
Welche Version, das sagen sie leider nicht. Ich befürchte, es ist nicht die neueste (die CDs müssen ja gebrannt werden), und damit mal wieder wertlos für die Entwicklung (10.4 kam mit kaputtem Ruby.) Aber ich vermute auch, dass jetzt Rubygems eingebaut ist – ein sudo gem up sollte also reichen.
Schön, dass sich Apple so um seine Kunden bemüht.
Update: Ruby 1.8.6 ist es – fragt sich, welches Patchlevel. Da sind sogar Links auf die Seiten von Rails, Mongrel und Capistrano! o_O Bloß nicht auf ruby-lang.org.
Update: Es ist Rails 1.2.3.
Update: Gem-Liste
Öhm…die neueste Version von Rails ist da ^^ Schon wieder…diesmal mit HTML-Escaping für JSON.