2

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

4

2 回答 2

3

更长的答案。

要将一段可执行代码传递给方法,请使用块。

方法定义是

method: aBlock
    aBlock value 

你执行它如下

object method: [ Transcript show: 'hello' ].

如果要将参数传递给代码段,请使用带参数的块。

方法定义是

method: aBlock
    aBlock value: 'parameter' 

你执行它如下

object method: [ :arg | Transcript show: arg ].

value:value:使用块的方法和方法,可以使用 2 个或无限参数来完成相同的操作valueWithArguments:

如果你传入一个符号,你也可以使用value:它来执行它。一个符号实际上相当于一个块的形式[ :arg | arg symbol ]

于 2009-12-05T21:38:02.210 回答
2

你混淆了两个不同的东西。您在 Smalltalk 中传递的唯一真正的“功能”是块,您只需通过编写一个块作为参数来传递它(就像您对 each 所做的那样ifTrue:)。如果您想向对象发送消息但要动态确定消息,您可以将消息名称作为符号传递(例如#value)并将其发送给某个对象(例如 with perform:)。您自己不传递实例方法。传递一个选择器符号或传递一个发送消息以调用该方法的块。

于 2009-11-30T18:36:30.957 回答