Smalltalk(尤其是 Squeak/Pharo)是否具有某种形式的可变参数函数?
我只是在读关于在 smalltalk 中设计自己的控制语句的力量,虽然我是 ifTrue 的忠实粉丝:ifFalse:我很难想出一种实现任意 if、if else、if else 的好方法,...,else 语句思考 Variadic 函数对于实现 case 语句有多么有用。就像是
假类
ifTrue: aBlock (... elseIf: aBoolean then: aSecondBlock ...) else: aLastBlock
vArgList pairsDo: [:x :y| x ifTrue:[^ (y value)] ].
^ aLastBlock
最佳答案
Smalltalk 的类似关键字的方法调用语法本质上定义了方法的数量。没有 &rest
模式类似于 Common Lisp。
你当然可以让一个方法获取一个列表,比如 BlockClosure>>valueWithArguments:
但这几乎不是一回事。
您可能会修改 Compiler
支持可变参数方法调用。也许电话只会有 with:
每个变量之间:
(condition) ifTrue: aBlock elseIf: aBoolean with: aSecondBlock with: anotherBoolean with: aThirdBlock
关于Smalltalk 可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872246/