我有一个smalltalk方法:
isInvalid
|tmp|
tmp := super isInvalid.
tmp ifTrue: [^ True].
^ instanceVar isNil.
我得到一个异常:未处理的异常:非 bool 接收器——为真相而继续
在分配给 temp 时抛出。我非常确定 super isInvalid
返回一个 bool 对象,所以我想我误解了这个异常的含义。还有其他人碰巧知道吗?
最佳答案
很久以前,A 在 Smalltalk 全职工作。很高兴看到它还活着......
我在您的代码中看到以下错误:
- 您使用值
True
作为返回值,这是(在 Smalltalk 中)只有值true
的类。 - 您必须改为使用值
true
,它是(我认为)来自 Smalltalk VM 的预定义对象之一,它们是true
、false
,无
。 更好的解决方案是:
^ super isInvalid or: [instanceVar isNil]
这会用 bool 表达式(始终为
true
或false
,不可能出错)替换整个正文或您的消息。 (感谢 Fabian 提供正确的方法or:
。)
所以使用正确的返回值,错误信息就会消失。
顺便说一句,错误消息Unhandled exception: NonBoolean receiver--proceed for truth
是某种调试帮助,它允许您继续,以便您能够更快地开发.. . 再也没有在任何其他语言中看到过 ...
关于exception - 非 bool 型接收者——求真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163038/