smalltalk从VisualWorks中的块返回字符串



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

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

我以为一切都是一样的,所以我很困惑。但我想我只是错过了什么。

编辑:它似乎在Pharo的领导下工作。。。

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

如果你这样写代码,它会起作用:

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

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

这修复了您的错误,因为正如我所怀疑和David所验证的,VisualWorks Strings DNU #value

n.b.正如Bob所说,你的问题中缺少的关键信息是"哪个对象DNU哪个消息?"一般来说,你对自己的错误越具体,答案就越好。

对我来说很好。

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

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

最新更新