eiffel - 为什么后置条件中相同表达式的当前值和“旧”值相等?
问题描述
我试图在实现之前和之后获取二维数组中条目的值。但是下面的后置条件失败了,因为这两个条目在某种程度上是相同的(是的,我已经重新定义了 is_equal,所以~将是对象相等):
ensure
designated_cell_changed:
get_entry (row + 1, column + 1) /~ old get_entry (row + 1, column + 1)
为什么我会违反后置条件designated_cell_changed
?
解决方案
可能有几个原因:
令人怀疑为什么索引是
row + 1
andcolumn + 1
而不是row
andcolumn
。如果所讨论的特征明确地采用新值,例如
put (value: G; row, column: ...)
,它应该有一个先决条件require different_value: value /~ entry (row, column)
旁注:对于查询,建议使用名词或形容词,而不是动词,因此
entry
而不是get_entry
.如果特征不接受新值作为参数,它应该更新相应的值本身。
该功能的代码可能存在错误:
- 它不会一直更改值(例如,在某些条件分支中)。
- 它会更改值,但会更改其他一些索引。
如果特征
entry (row + 1, column + 1)
的开头和结尾的值不同,则实现is_equal
可能会漏掉一些使对象不同的情况。
推荐阅读
- amp-html - 如何使用 amp-form 设置 ajax 标头
- x86 - PCIe 插槽上的 SMBus
- python - 我可以在树莓派 3 B+ 中使用蓝牙耳机进行语音识别吗?
- deep-learning - 使用连体网络的人脸检测演示
- python-3.x - 在kivy上获得一个空白屏幕
- css - HTML 如何使日期选择器在 Internet Explorer 11 上可见?
- node.js - 如何在 Angular 7 中使用 datepicker 对数据进行排序?
- php - 在laravel 5.6中重置密码时从所有浏览器注销用户
- reactjs - 可以使用简单的形式访问 PayPal API,但不能使用 React Element (node/cors)
- javascript - 使用 Angular JS 数据表在其中一列中添加 Jquery datepicker