*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Thu, 23 Jan 1997 05:59:09 +0100
changeset 2239 3441ce074c04
parent 2238 771e3c99a505
child 2240 96ecba03d362
*** empty log message ***
VarArgBlock.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VarArgBlock.st	Thu Jan 23 05:59:09 1997 +0100
@@ -0,0 +1,199 @@
+Block subclass:#VarArgBlock
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Kernel-Methods'
+!
+
+!VarArgBlock class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
+	      All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+
+
+!
+
+documentation
+"
+    VarArgBlocks are much like blocks, but can accept a variable
+    number of arguments. They must be defined as a regular block,
+    with 1 argument. When executed, the actual argument list is
+    passed in that single argument (as a collection).
+
+    Create a variableArgument block by sending #varArgs to a regular
+    block.
+
+    [author:]
+	Claus Gittinger
+
+    [see also:]
+	Block
+"
+
+!
+
+examples
+"
+   the same block, evaluated with 2 or 5 arguments:
+								[exBegin]
+     |b|
+
+     b := [:args | Transcript show:'wow: '; showCR:args] varArgs.
+
+     b value:'hi' value:'there'. 
+     b value:'hello' value:'there' value:'how' value:'about' value:'this'.
+								[exEnd]
+
+
+   does it accept a variable number of arguments ?:
+								[exBegin]
+     |b|
+
+     b := [:args | Transcript showCR:args].
+     Transcript showCR:(b isVarArgBlock).
+
+     b := [:args | Transcript showCR:args] varArgs.
+     Transcript showCR:(b isVarArgBlock)
+								[exEnd]
+"
+
+    "Created: 23.1.1997 / 04:57:26 / cg"
+! !
+
+!VarArgBlock methodsFor:'evaluation'!
+
+value
+    "evaluate the receiver with no block args."
+
+    ^ super value:#()
+
+    "Created: 23.1.1997 / 04:57:49 / cg"
+!
+
+value:arg
+    "evaluate the receiver with a single argument."
+
+    ^ super value:(Array with:arg)
+
+    "Created: 23.1.1997 / 04:57:57 / cg"
+!
+
+value:arg1 value:arg2
+    "evaluate the receiver with two arguments."
+
+    ^ super value:(Array with:arg1 with:arg2)
+
+    "Created: 23.1.1997 / 04:58:03 / cg"
+!
+
+value:arg1 value:arg2 value:arg3
+    "evaluate the receiver with three arguments."
+
+    ^ super value:(Array with:arg1 with:arg2 with:arg3)
+
+    "Created: 23.1.1997 / 04:58:09 / cg"
+!
+
+value:arg1 value:arg2 value:arg3 value:arg4
+    "evaluate the receiver with four arguments."
+
+    ^ super value:(Array 
+		    with:arg1 
+		    with:arg2 
+		    with:arg3 
+		    with:arg4)
+
+    "Modified: 22.1.1997 / 19:41:22 / cg"
+    "Created: 23.1.1997 / 04:58:14 / cg"
+!
+
+value:arg1 value:arg2 value:arg3 value:arg4 value:arg5
+    "evaluate the receiver with five arguments."
+
+    ^ super value:(Array 
+		    with:arg1 
+		    with:arg2 
+		    with:arg3 
+		    with:arg4
+		    with:arg5)
+
+    "Modified: 22.1.1997 / 19:41:26 / cg"
+    "Created: 23.1.1997 / 04:58:18 / cg"
+!
+
+value:arg1 value:arg2 value:arg3 value:arg4 value:arg5 value:arg6
+    "evaluate the receiver with six arguments."
+
+    ^ super value:(Array 
+		    with:arg1 
+		    with:arg2 
+		    with:arg3 
+		    with:arg4
+		    with:arg5
+		    with:arg6)
+
+    "Modified: 22.1.1997 / 19:41:29 / cg"
+    "Created: 23.1.1997 / 04:58:22 / cg"
+!
+
+value:arg1 value:arg2 value:arg3 value:arg4 value:arg5 value:arg6 value:arg7
+    "evaluate the receiver with seven arguments."
+
+    ^ super value:(Array 
+		    with:arg1 
+		    with:arg2 
+		    with:arg3 
+		    with:arg4
+		    with:arg5
+		    with:arg6
+		    with:arg7)
+
+    "Modified: 22.1.1997 / 19:41:33 / cg"
+    "Created: 23.1.1997 / 04:58:26 / cg"
+!
+
+value:arg1 value:arg2 value:arg3 value:arg4 value:arg5 value:arg6 value:arg7 value:arg8
+    "evaluate the receiver with eight arguments."
+
+    ^ super value:(Array 
+		    with:arg1 
+		    with:arg2 
+		    with:arg3 
+		    with:arg4
+		    with:arg5
+		    with:arg6
+		    with:arg7
+		    with:arg8)
+
+    "Created: 23.1.1997 / 04:58:30 / cg"
+!
+
+valueWithArguments:argArray
+    "evaluate the receiver with all arguments in argArray."
+
+    ^ super value:argArray
+
+    "Created: 23.1.1997 / 04:59:16 / cg"
+! !
+
+!VarArgBlock methodsFor:'testing'!
+
+isVarArgBlock
+    "return true, if this block accepts a variable number of arguments"
+
+    ^ true
+
+    "Created: 23.1.1997 / 05:00:18 / cg"
+! !
+
+