为什么后置条件中同一表达式的当前值和 "old" 值相等?
Why current and "old" value of the same expression in a postcondition are equal?
我试图在实现之前和之后获取二维数组中条目的值。但是下面的后置条件失败了,因为这两个条目在某种程度上是相同的(是的,我已经重新定义了 is_equal,所以 ~将是对象平等):
ensure
designated_cell_changed:
get_entry (row + 1, column + 1) /~ old get_entry (row + 1, column + 1)
为什么我会违反后置条件 designated_cell_changed
?
可能有以下几个原因:
奇怪为什么索引是row + 1
和column + 1
而不是row
和column
.
如果相关特征明确采用新值,例如put (value: G; row, column: ...)
,它应该有一个前置条件
require
different_value: value /~ entry (row, column)
旁注: 对于查询,建议使用名词或形容词,而不是动词,因此 entry
而不是 get_entry
。
如果特征不接受新值作为参数,它应该自己更新相应的值。
功能代码可能有错误:
- 它不会一直更改值(例如,在某些条件分支中)。
- 它改变了值,但在其他一些索引处。
如果特征开始和结束的entry (row + 1, column + 1)
的值不同,is_equal
的实现可能会遗漏一些使对象不同的情况。
我试图在实现之前和之后获取二维数组中条目的值。但是下面的后置条件失败了,因为这两个条目在某种程度上是相同的(是的,我已经重新定义了 is_equal,所以 ~将是对象平等):
ensure
designated_cell_changed:
get_entry (row + 1, column + 1) /~ old get_entry (row + 1, column + 1)
为什么我会违反后置条件 designated_cell_changed
?
可能有以下几个原因:
奇怪为什么索引是
row + 1
和column + 1
而不是row
和column
.如果相关特征明确采用新值,例如
put (value: G; row, column: ...)
,它应该有一个前置条件require different_value: value /~ entry (row, column)
旁注: 对于查询,建议使用名词或形容词,而不是动词,因此
entry
而不是get_entry
。如果特征不接受新值作为参数,它应该自己更新相应的值。
功能代码可能有错误:
- 它不会一直更改值(例如,在某些条件分支中)。
- 它改变了值,但在其他一些索引处。
如果特征开始和结束的
entry (row + 1, column + 1)
的值不同,is_equal
的实现可能会遗漏一些使对象不同的情况。