Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

class Proc
Parent: Object
Version: 1.6

Index:

new [ ] arity call


Proc-Objekte sind Codeblöcke, die an einen Satz von lokalen Variablen angebunden sind. Einmal angebunden, kann der Code in verschiedenen Kontexten aufgerufen werden und trotzdem auf diese Variablen zugreifen.

def genTimes(factor)
  return Proc.new {|n| n*factor }
end
times3 = genTimes(3)
times5 = genTimes(5)
times3.call(12) » 36
times5.call(5) » 25
times3.call(times5.call(4)) » 60

class methods
new Proc.new [{| | block }]-> einProc

Erstellt ein neues Proc-Objekt, das an den aktuellen Kontext gebunden ist. Die Methode kann ohne einen eigenen Codeblock nur innerhalb einer Methode mit einem angebundenen Codeblock aufgerufen werden. In diesem Fall wird der bestehende Block in das Proc-Objekt konvertiert.

def procFrom
  Proc.new
end
einProc = procFrom { "hello" }
einProc.call » "hello"

instance methods
[ ] prc[ [params]* ] -> einObjekt

Synonym für Proc.call.

arity prc.arity -> einInteger

Gibt die Anzahl der für den Block erforderlichen Argumente zurück. Wenn der Block keine Argumente benötigt, wird -1 zurückgegeben. Wenn genau ein Argument benötigt wird, -2. In allen anderen Fällen wird eine positive Zahl mit der Argument-Zählung übergeben, ausser das letzte Argument trägt ein * als Präfix. In diesem Fall wird die Zählung mit einem negativen Vorzeichen versehen. Die Anzahl der benötigten Argumente ist einInteger für positive Werte und anderenfalls (einInteger+1).abs.

Proc.new {||}.arity » 0
Proc.new {|a|}.arity » -1
Proc.new {|a,b|}.arity » 2
Proc.new {|a,b,c|}.arity » 3
Proc.new {|*a|}.arity » -1
Proc.new {|a,*b|}.arity » -2

call prc.call( [params]* ) -> einObjekt

Ruft den Codeblock auf und setzt die Parameter auf die in params übergebenen Werte, wobei dieselben Regeln gelten wie bei paralleler Zuweisung (vgl. hierzu Kapitel 18, ``Die Sprache Ruby''). Gibt den Wert des letzten Ausdrucks im Codeblock zurück.

einProc = Proc.new {|a, *b| b.collect {|i| i*a }}
einProc.call(9, 1, 2, 3) » [9, 18, 27]
einProc[9, 1, 2, 3] » [9, 18, 27]


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Carsten Schinzer
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".