Smalltalk 可变参数函数

标签 smalltalk if-statement variadic-functions pharo control-structure

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/

相关文章:

keyboard-shortcuts - 在 Pharo v3 中的 Pane 之间切换

multithreading - Smalltalk Visual Works并发

smalltalk - 如何在 Squeak 中启动全局变量

mysql - 如何在mysql select中自动连接字符串长度

c++ - 您是否应该依赖 IF 语句将除 0 以外的任何其他整数值捕获为真?

clojure - 带关键字参数的可变参数函数

smalltalk - 报告 Seaside Sessions,例如到期时间

mysql - 新手 : unix bash, 嵌套 if 语句,循环结果来自 sql

python - 如何使用 PySpark 将变量参数传递给 Spark Dataframe?

c++ - 如何解压在 mixins 主机类中传递的一组元组(最终被转发给 mixins)