在Squeak中将函数作为参数传递

时间:2009-11-30 18:26:36

标签: squeak

由于Squeak纯粹是面向对象的,我相当肯定你应该能够将函数作为参数传递给其他函数,但是当我研究这个时,我找不到任何关于这个的信息。我的直觉是否正确?如果是这样,它是如何完成的,以后如何调用它们?

2 个答案:

答案 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:) 。您不会自己传递实例方法。传递选择符号或传递发送消息的块来调用方法。