smalltalk从VisualWorks中的块返回字符串

时间:2014-10-13 16:41:53

标签: block smalltalk visualworks

我想返回将int传递给块的值。如果它是一个数字,一切都很好,但如果我输入一个字符串或布尔值,我得到一个“消息不理解”。

q := [ :a | a].
Transcript show: ((q value:'123') value) printString.

我认为一切都是一样的,所以我很困惑。但我想我只是遗漏了一些东西。

编辑:它似乎在Pharo下工作......

3 个答案:

答案 0 :(得分:2)

消息"值"在VisualWorks中没有为Object实现。有些应用程序会添加它,但它不在基类库中。在某些版本的VisualWorks中,它滑入基类库,后来被取出。

如果您编写这样的代码,它将起作用:

q := [ :a | a].
Transcript show: (q value:'123') printString.

答案 1 :(得分:1)

删除#value的发送。您描述它的示例不是必需的。 #value:被发送到Block,它会根据需要返回参数。然后将#value发送到参数,该参数在Pharo中有效,因为它返回self并且本质上是非操作。

这可以解决您的错误,因为我怀疑和David验证过,VisualWorks Strings DNU #value

n.b。正如Bob所说,你问题中的关键缺失信息是"哪个对象DNU是哪个消息?"一般而言,您对错误的具体程度越高,答案就越好。

答案 2 :(得分:0)

对我来说很好。

| q |
q := [ :a | a].
Transcript show: ((q value: true) value) printString.

| q |
q := [ :a | a].
Transcript show: ((q value: 123) value) printString.

如果您有DNU异常,您将能够看到哪个对象正在接收不理解的消息。发布该信息。