簡體   English   中英

埃菲爾鐵塔,多種類型的一致性:一種指定參數是A和B的后代的方法嗎?

[英]Eiffel, multiple types conformance: a way to specify that a parameter is a descendent from A and B?

有沒有一種方法(我確定沒有運行時檢查...)來指定一個參數或一個變量通常符合多種類型? 避免做諸如

work (a_printer: PRINTER; a_scanner: SCANNER)
    do
      a_printer.print
      a_scanner.scan
        -- OR without second parameter
      if attached {SCANNER} a_printer as l_scanner then
         l_scanner.scan
      else
         throw RuntimeError
      end
    end

我認為,如果可能的話,您應該對多種類型使用共同的祖先。 如果不能(如果使用庫類型),則可以創建后代類( MY_PRINTER繼承自PRINTERDEVICEMY_SCANNER繼承自SCANNERDEVICE )。 另一種方法是使用ANY作為類型,但這不是最佳解決方案。

如果要素work屬於可能具有形式通用參數的類,則可以將其定義為采用相應形式通用類型的一個參數:

class X [D -> {PRINTER, SCANNER}] feature
    work (device: D)
        do
            device.scan
            device.print
        end
end

然后,在主叫方可以撥打電話

x.work (multi_function_device)

其中x具有適當的類型,例如X [MULTI_FUNCTION_PRINTER]

如果也可以將work聲明為類功能並將其實現,則可以避免使用臨時變量:

{X [like multi_function_device]}.work (multi_function_device)

如果輔助類X不是一個選項,則該語言的當前版本不提供任何方法聲明一個參數符合一種以上的類型(例如, work (d: {PRINTER, SCANNER}) ),因此您必須訴諸於諸如

work (p: PRINTER)
    require
        attached {SCANNER} p
    do
        check
            from_precondition: attached {SCANNER} p as s
        then
            s.scan
        end
        p.print
    end

暫無
暫無

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

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