簡體   English   中英

estudio 什么時候不檢查`require`?

[英]estudio does not check `require` when it should?

即使我在項目設置中啟用了 Eiffel Studio 似乎也滿足了我的要求。 據我記得,我有時間在需求中設置一個斷點......

我不明白我在這里缺少什么,正如您在我的示例中看到的那樣,要求通過,因為我對代碼有相同的條件並且它進入( attached {POWER_DEVICE} a_csv.device as l_dev )。

在此處輸入圖像描述

繼承斷言的一般規則如下:

  • 前提條件只能放寬;
  • 只能加強后置條件。

在特定示例中,有效的前提條件是

    True
or else
    valid_csv (a_csv) and then attached {POWER_DEVICE} a_csv.device

這體現在特征的扁平形式中組合前置條件開頭的關鍵字require和中間的require else中。 表達式True是繼承的。 這是父項中特征的先決條件。

一種可能的解決方案是將valid_csv (a_csv)移到父特征,並在后代中重新定義valid_csv 如果valid_csv對於所有調用都是通用的,但第二個測試因后代而異,則最好引入一個新功能is_known並在父級中有 2 個前置條件子句:

is_valid_csv: is_valid_csv (a_csv)
is_known_csv: is_known_csv (a_csv)

is_known_csv在 class POWER_CSV_PROCESSOR中的實現將是

is_known_csv (a_csv: ...)
    do
        Result := attached {POWER_DEVICE} a_csv.device
    end

並且POWER_CSV_PROCESSOR中特征process的前提條件為空。

然后調用者會做類似的事情

if processor.is_known_csv (csv) then
    processor.process (csv)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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