delphi – IfThen(Assigned(Widget),Widget.Description,’No Wi
在我帮助维护的代码中,我找到了多个代码示例,如下所示:
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. 如果我正确理解了我读到的内容,那么如果使用运行时包构建代码,代码也会崩溃.
像Uli Gerhardt评论的那样,它可能被认为是一个首先起作用的错误.由于行为不是契约性的,因此可以随时更改. 如果我要提出任何建议,我会将其标记为低优先级“修复”.我很确定有人会争辩说,如果代码有效,它不需要修复,没有错误.那时,它变得更像一个哲学问题(If a tree falls in a forest and no one is around to hear it,does it make a sound?) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |