加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – IfThen(Assigned(Widget),Widget.Description,’No Wi

发布时间:2020-12-15 09:35:23 所属栏目:大数据 来源:网络整理
导读:在我帮助维护的代码中,我找到了多个代码示例,如下所示: Description := IfThen(Assigned(Widget),Widget.Description,'No Widget'); 我预计当Widget为零时会崩溃,但是当我测试它时,它完美地运行了. 如果我在项目 – 选项 – 编译器中关闭“代码内联控件”重
在我帮助维护的代码中,我找到了多个代码示例,如下所示:

Description := IfThen(Assigned(Widget),Widget.Description,'No Widget');

我预计当Widget为零时会崩溃,但是当我测试它时,它完美地运行了.

如果我在项目 – 选项 – 编译器中关闭“代码内联控件”重新编译它,我会收到访问冲突.

看起来,因为IfThen被标记为内联,如果Widget为nil,编译器通常不会评估Widget.Description.

有没有理由说代码应该“修复”,因为它似乎没有被破坏?他们不希望代码不必要地改变.
是否有可能咬他们?

我用Delphi XE2和XE6测试过它.

解决方法

就个人而言,我讨厌依赖不合同的行为.

The inline directive is a suggestion to the compiler.

如果我正确理解了我读到的内容,那么如果使用运行时包构建代码,代码也会崩溃.

inlining never occurs across package boundaries

像Uli Gerhardt评论的那样,它可能被认为是一个首先起作用的错误.由于行为不是契约性的,因此可以随时更改.

如果我要提出任何建议,我会将其标记为低优先级“修复”.我很确定有人会争辩说,如果代码有效,它不需要修复,没有错误.那时,它变得更像一个哲学问题(If a tree falls in a forest and no one is around to hear it,does it make a sound?)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读