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