Moin,
* Frank Küster wrote (2005-08-02 18:39):
>In Python:
>
>for <name> in <liste>
> body
>
>und in Ruby
>
><liste>.each { |<name>|
> body
>}
>
>Hier passieren zwei Dinge, die für mich ungewohnt sind. Zum einen dass
>eine Variable einer Funktion als Argument übergeben wird, indem man sie
>mit '.' verbindet (anstatt wie üblich mit Klammern oder ganz ohne), und
>das ganze auch noch in postfix-Notation - also nicht each.<liste>.
Na, das hätte Dich dann vielleicht darauf bringen sollen, daß Deine
Betrachtungsweise in diesem Fall, sagen wir, den Sachverhalt nicht
vollständig beschreibt.
In Deinem Beispiel ist <liste> ein Objekt, dem die Nachricht 'each'
geschickt wird. Das 'each' wiederum hat einen Parameter, nämlich den
Block '{ |<name>| body }'. Die Punktschreibweise gibt es so auch in C,
C++ und Java. Daß man einen Block als Parameter übergibt ist in Ruby
neu und sehr geil.
>Zum zweiten ein Mix von Syntaxelementen und Funktionen. Der Pythonstil ist
>"reine Syntax", er besteht nur aus Schlüsselworten (und Schlüsselsymbol-
>en, wenn man die Einrückung berücksichtigt). In Ruby verwendet man eine
>*Funktion*, um das gleiche syntaktische Konstrukt zu erzeugen.
Es ist eben nicht das gleiche, siehe oben und meine andern Mails.
>Und dann - aber das fällt mir erst jetzt auf - wird Prefix-Notation mit
>Space und Postfix-Notation mit dot gemischt:
>
>if <name>.funktion.eins?
> funktion.zwei "is a directory"
Punkt und Klammern sind eben unterschiedliche Dinge. In allen Fällen
ist die Schreibweise identisch, man kann eben in Ruby nur Dinge
weglassen, die man gerade nicht braucht:
Objekt . Methode ( Parameter ) Block
Dir . new ( '/tmp' )
dir . each { |filename| <block> }
filename . stat
stat . directory?
print "is a directory"
Thorsten
--
In dem Augenblick, wo wir anfangen unsere Freiheitsrechte
einzuschränken, besorgen wir das Geschäft der Terroristen.
- Günter Grass
pgpupBjLsyiat.pgp
Description: PGP signature

