我很难摆脱我的Dafny程序中的最后一个错误。有人能指出我正确的方向吗? 以下是代码:http://rise4fun.com/Dafny/2FPo
我收到此错误:赋值可能更新数组元素而不是封闭上下文的modifies子句
我尝试在merge方法中添加修改矩形(尽管我很确定已经包含在修改它中)但是这只会在merge方法调用中创建类似的错误。
我真的迷失了这个。谢谢你的帮助
答案 0 :(得分:6)
问题是"修改了这个"允许修改字段,而不是修改那些字段指向的东西。换句话说,如果方法正在进行,那将是合适的:
this.rectangles := new_rectangle_array;
但不是如果它在做:
this.rectangles[3] := new_rect;
所以,在你所拥有的地方"修改这个"你应该改为使用"修改矩形"。
由于类似的原因,测试需要使用"修改c.rectangles",而不是"修改c"。
最后,为了说服Dafny调用Test,你需要给Couverture的构造函数一个约束矩形字段的后置条件。否则,验证者无法确定可以调用Test:只要验证者可以知道,couv可能包含一些主要不允许修改的随机数组。
有关完整代码,请参阅http://rise4fun.com/Dafny/Skrg。