Block.st
changeset 20623 1f54b9dbfea2
parent 20621 acb096a8c2b1
child 20727 fb8c5591428b
child 20773 c9d6f5d209d9
--- a/Block.st	Thu Oct 13 12:33:59 2016 +0200
+++ b/Block.st	Thu Oct 13 14:43:12 2016 +0200
@@ -1071,6 +1071,105 @@
     "
 !
 
+value:arg1 optionalArgument:arg2 and:arg3 and:arg4
+    "evaluate the receiver.
+     Optionally pass up one, two, three or four arguments 
+     (if the receiver is a 1/2/3/4-arg block)."
+
+    nargs == 4 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4
+    ].
+    nargs == 3 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3
+    ].
+    nargs == 2 ifTrue:[
+        ^ self value:arg1 value:arg2
+    ].
+    ^ self value:arg1
+
+    "
+     |block|
+
+     block := [:arg | Transcript showCR:arg ].
+     block value:1 optionalArgument:2 and:3 and:4.
+
+     block := [:arg1 :arg2 | Transcript show:arg1; space; showCR:arg2 ].
+     block value:1 optionalArgument:2 and:3 and:4.
+
+     block := [:arg1 :arg2 :arg3 :arg4 | Transcript showCR:{arg1 . arg2 . arg3 . arg4}].
+     block value:1 optionalArgument:2 and:3 and:4.
+    "
+!
+
+value:arg1 optionalArgument:arg2 and:arg3 and:arg4 and:arg5
+    "evaluate the receiver.
+     Optionally pass up five arguments 
+     (if the receiver is a 1..5-arg block)."
+
+    nargs == 5 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4 value:arg5
+    ].
+    nargs == 4 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4
+    ].
+    nargs == 3 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3
+    ].
+    nargs == 2 ifTrue:[
+        ^ self value:arg1 value:arg2
+    ].
+    ^ self value:arg1
+
+    "
+     |block|
+
+     block := [:arg | Transcript showCR:arg ].
+     block value:1 optionalArgument:2 and:3 and:4 and:5.
+
+     block := [:arg1 :arg2 | Transcript show:arg1; space; showCR:arg2 ].
+     block value:1 optionalArgument:2 and:3 and:4 and:5.
+
+     block := [:arg1 :arg2 :arg3 :arg4 :arg5 | Transcript showCR:{arg1 . arg2 . arg3 . arg4 . arg5}].
+     block value:1 optionalArgument:2 and:3 and:4 and:5.
+    "
+!
+
+value:arg1 optionalArgument:arg2 and:arg3 and:arg4 and:arg5 and:arg6
+    "evaluate the receiver.
+     Optionally pass up six arguments 
+     (if the receiver is a 1..6-arg block)."
+
+    nargs == 6 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4 value:arg5 value:arg6
+    ].
+    nargs == 5 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4 value:arg5
+    ].
+    nargs == 4 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4
+    ].
+    nargs == 3 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3
+    ].
+    nargs == 2 ifTrue:[
+        ^ self value:arg1 value:arg2
+    ].
+    ^ self value:arg1
+
+    "
+     |block|
+
+     block := [:arg | Transcript showCR:arg ].
+     block value:1 optionalArgument:2 and:3 and:4 and:5 and:6.
+
+     block := [:arg1 :arg2 | Transcript show:arg1; space; showCR:arg2 ].
+     block value:1 optionalArgument:2 and:3 and:4 and:5 and:6.
+
+     block := [:arg1 :arg2 :arg3 :arg4 :arg5 :arg6 | Transcript showCR:{arg1 . arg2 . arg3 . arg4 . arg5 . arg6}].
+     block value:1 optionalArgument:2 and:3 and:4 and:5 and:6.
+    "
+!
+
 value:arg1 value:arg2
     "evaluate the receiver with two arguments.
      The receiver must be a 2-arg block."
@@ -1171,6 +1270,16 @@
     ^ self wrongNumberOfArguments:3
 !
 
+value:arg1 value:arg2 value:arg3 optionalArgument:arg4
+    "evaluate the receiver.
+     Optionally pass three or four arguments (if the receiver is a 3/4-arg block)."
+
+    nargs == 4 ifTrue:[
+        ^ self value:arg1 value:arg2 value:arg3 value:arg4
+    ].
+    ^ self value:arg1 value:arg2 value:arg3
+!
+
 value:arg1 value:arg2 value:arg3 value:arg4
     "evaluate the receiver with four arguments.
      The receiver must be a 4-arg block."