是否有一种方法(我确定没有运行时检查...)来指定参数或变量通常符合多种类型?避免做诸如
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
答案 0 :(得分:1)
我认为,如果可能的话,您应该对多种类型使用共同的祖先。如果不能(如果使用库类型),则可以创建后代类(MY_PRINTER
继承自PRINTER
和DEVICE
,MY_SCANNER
继承自SCANNER
和DEVICE
)。另一种方法是使用ANY
作为类型,但这不是最佳解决方案。
答案 1 :(得分:1)
如果功能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
,则该语言的当前版本不提供任何方法来声明自变量符合1种以上的类型(例如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