首页 > 解决方案 > 埃菲尔,多种类型一致性:一种指定参数是 A 和 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

标签: eiffel

解决方案


我认为,如果可能的话,你应该为你的多种类型使用一个共同的祖先。如果你不能(如果你使用库类型),你可以创建后代类(继承MY_PRINTERPRINTER和继承自DEVICE和)。另一种方法是使用as 类型,但这不是最好的解决方案。MY_SCANNERSCANNERDEVICEANY


推荐阅读