簡體   English   中英

確保在埃菲爾鐵塔中的未知標識符

[英]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

但是由於某種原因,我得到了ij的未知標識符。 有誰知道導致此錯誤的原因以及如何解決? 另外,還有沒有其他方法可以使用across ... as ... all ... endensureacross ... as ... all ... end 非常感謝!

我不知道為什么會出現編譯錯誤-我粘貼了代碼,並且可以正常編譯。

順便說一句,埃菲爾風格指南指出,您的注釋應該在功能名稱和參數之后,而不是在功能名稱和參數之后。

如另一個答案中所述,編譯似乎沒有問題。 因此,可能需要更多信息來找出問題所在:編譯器,其版本等。

示例代碼至少有幾種選擇:

  1. 用結構本身上的迭代替換索引上的迭代:

     across a as u all across a as v all u.target_index /= v.target_index implies u.item /= v.item end end 
  2. 編寫一個輔助函數,它將執行必要的測試並將其結果作為BOOLEAN返回。

  3. 添加一個在結構上進行迭代並使用測試代理作為參數的輔助函數,類似於

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM