2

我有一个 smalltalk 方法:

isInvalid
    |tmp|
    tmp := super isInvalid.
    tmp ifTrue: [^ True].
    ^ instanceVar isNil.

我遇到了一个异常:Unhandled exception: NonBoolean receiver--proceed for truth对 temp 的分配抛出了异常。我很确定它super isInvalid返回一个布尔对象,所以我想我误解了这个异常的含义。有没有其他人碰巧知道?

4

1 回答 1

6

很久以前,a 全职在 Smalltalk 工作。很高兴看到它还活着...

我在您的代码中看到以下错误:

  • 您使用 value 作为返回值True,它是(在 Smalltalk 中)只有 value 的类true
  • 您必须使用值true,它是 Smalltalk 的 VM 中的(我认为)预定义对象之一,它们是true, false, nil.
  • 一个更好的解决方案是:

    ^ super isInvalid or: [instanceVar isNil]
    

    这将用布尔表达式替换整个正文或您的消息(始终是trueor false,没有错误的可能性)。(感谢 Fabian 提供正确的方法or:。)

所以使用正确的返回值,错误信息就会消失。

顺便说一句,错误消息Unhandled exception: NonBoolean receiver--proceed for truth是某种调试帮助,它允许您继续,以便您能够更快地开发......再也没有用任何其他语言看到过......

于 2013-03-01T17:16:53.483 回答