假设我们有以下代码:
UpVec sumUpVectors(UpVec vecX, UpVec vecY) { ... return vecResult; }
LeftVec sumLeftVectors(LeftVec vecX, LeftVec vecY) { ... return vecResult; }
是否有一种编程语言,可以以一种相当简单的方式允许这样的代码:
UpVec Up;
LeftVec Left;
UpVec, LeftVec mixedVec;
sumUpVectors (Up, Up);
sumUpVectors(mixedVec, Up); // no type errors
sumLeftVectors(mixedVec, Left); // no type errors
sumLeftVectors(Up, Left); // type error
在上面的伪代码中,变量Up
的类型为UpVec
,变量Left
的类型为LeftVec
,变量mixedVec
是UpVec
和LeftVec
的。变量mixedVec
可以传递到仅需要UpVec
变量的函数中,也可以传递到需要LeftVec
变量的函数中,而不会发生类型错误,而变量Up
和{{1 }}。
假设语言不会强迫用户明确创建新类型作为两个现有类型的组合/联合,然后将新的单个类型分配给变量。这也避免了手动或在编译时使用重载函数:应该只有一个函数Left
和一个sumUpVectors
。
我猜想这将使用整个类的某种幕后多重继承来完成,但是在不涉及大量重载的情况下,我看不到这样做的直接方法。