exception - 非 bool 型接收者——求真

标签 exception smalltalk

我有一个smalltalk方法:

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

我得到一个异常:未处理的异常:非 bool 接收器——为真相而继续在分配给 temp 时抛出。我非常确定 super isInvalid 返回一个 bool 对象,所以我想我误解了这个异常的含义。还有其他人碰巧知道吗?

最佳答案

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

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

  • 您使用值 True 作为返回值,这是(在 Smalltalk 中)只有值 true 的类。
  • 您必须改为使用值 true,它是(我认为)来自 Smalltalk VM 的预定义对象之一,它们是 truefalse
  • 更好的解决方案是:

    ^ super isInvalid or: [instanceVar isNil]
    

    这会用 bool 表达式(始终为 truefalse,不可能出错)替换整个正文或您的消息。 (感谢 Fabian 提供正确的方法 or:。)

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

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

关于exception - 非 bool 型接收者——求真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163038/

相关文章:

compatibility - 所有 Smalltalk 实现都兼容吗?

jquery - Seaside 定期更新 JQuery

java - 如何使 jaxb-xjc Throwable 使用 "Exception"类型类?

smalltalk - 有什么方法可以先枚举一个对象再枚举一个集合吗?

exception - mybatis异常时如何获取参数

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

smalltalk - Smalltallk - 如何获取类的对象(当前实例)中所有实例变量的数组(或集合)?

smalltalk - 如何使用 Gofer 将 Monticello 包复制到另一个名称不同的存储库

python - pandas DataFrame KeyError : get list of missing keys

C++ dynamic_cast 异常