由于Squeak纯粹是面向对象的,我相当肯定你应该能够将函数作为参数传递给其他函数,但是当我研究这个时,我找不到任何关于这个的信息。我的直觉是否正确?如果是这样,它是如何完成的,以后如何调用它们?
答案 0 :(得分:3)
更长的答案。
要将一段可执行代码传递给方法,请使用块。
方法定义是
method: aBlock
aBlock value
然后按以下步骤执行
object method: [ Transcript show: 'hello' ].
如果要将参数传递给代码段,请使用带参数的块。
方法定义是
method: aBlock
aBlock value: 'parameter'
然后按以下步骤执行
object method: [ :arg | Transcript show: arg ].
使用块的value:value:
和valueWithArguments:
方法可以使用2个或无限制的参数完成相同的操作。
如果传入符号,也可以使用value:
执行符号。符号实际上等同于[ :arg | arg symbol ]
形式的块。
答案 1 :(得分:1)
你混淆了两件不同的事情。你在Smalltalk中传递的唯一真正的“函数”是块,只需将块作为参数写入就可以传递(就像你对每个ifTrue:
所做的那样)。如果要向对象发送消息但是要动态确定消息,则可以将消息名称作为符号传递(例如#value
)并将其发送到某个对象(例如,使用perform:
) 。您不会自己传递实例方法。传递选择符号或传递发送消息的块来调用方法。