0

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

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

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

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

4

3 回答 3

2

VisualWorks 中的对象未实现消息“值”。一些应用程序添加了它,但它不在基类库中。在 VisualWorks 的某些版本中,它滑入了基类库,后来又被删除了。

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

q := [ :a | a].
Transcript show: (q value:'123') printString.
于 2014-10-13T19:54:44.533 回答
1

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

这解决了您的错误,因为正如我怀疑和大卫验证的那样, VisualWorks Strings DNU #value

nb 正如鲍勃所说,您问题中缺少的关键信息是“哪个对象 DNU 哪个消息?” 一般来说,您对错误的描述越具体,答案就越好。

于 2014-10-13T18:33:57.890 回答
0

对我来说很好。

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

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

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

于 2014-10-13T17:20:21.550 回答