[英]Unknown identifiers for ensure block in Eiffel
所以,我是新來的艾菲爾編程和我想學寫后置條件在ensure
一個塊feature
,特別是與編寫循環。
所以我嘗試了這個:
feature
-- sets the value of a particular in an array to x
foo (a: ARRAY[INTEGER]; target_val, x: INTEGER)
require
valid_target: 1 <= target_val and target_val <= a.count
do
a[target_val] := x
ensure
across
1 |..| a.count as i
all
across
1 |..| a.count as j
all
i.item /= j.item implies a[i.item] /= a[j.item]
end
end
end
但是由於某種原因,我得到了i
和j
的未知標識符。 有誰知道導致此錯誤的原因以及如何解決? 另外,還有沒有其他方法可以使用across ... as ... all ... end
以ensure
塊across ... as ... all ... end
? 非常感謝!
我不知道為什么會出現編譯錯誤-我粘貼了代碼,並且可以正常編譯。
順便說一句,埃菲爾風格指南指出,您的注釋應該在功能名稱和參數之后,而不是在功能名稱和參數之后。
如另一個答案中所述,編譯似乎沒有問題。 因此,可能需要更多信息來找出問題所在:編譯器,其版本等。
示例代碼至少有幾種選擇:
用結構本身上的迭代替換索引上的迭代:
across a as u all across a as v all u.target_index /= v.target_index implies u.item /= v.item end end
編寫一個輔助函數,它將執行必要的測試並將其結果作為BOOLEAN
返回。
添加一個在結構上進行迭代並使用測試代理作為參數的輔助函數,類似於
for_all_with_index (a: ARRAY [BAR]; test: FUNCTION [BAR, INTEGER, BOOLEAN]): BOOLEAN do Result := across a as c all test (c.item, c.target_index) end end
並通過測試項目的代理商。 但是,即使使用單個代理程序也可以正常工作,但是嵌套相互依賴的代理程序的代碼也變得過於繁瑣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.