根据这个问题,我试图找到一种方法让Scala编译器推断两种类型A和B的最大公共子类型.
类似"A without B"的东西,其定义是:
(A without B = C) === (A = C with B)
Run Code Online (Sandbox Code Playgroud)
或者返回C的类型函数,其中:
编辑:
A <: C && C <:!< B
Run Code Online (Sandbox Code Playgroud)
即.A是C的子类型,C不是B的子类型
事实上,我希望有人会指出这与"最常见的子类型"不同,因为我实际上并不需要这样做A <: B.
用法:
trait Syntax
trait ANYSYNTAX extends Syntax
trait NUMERIC extends ANYSYNTAX
trait DISCRETE extends ANYSYNTAX
trait POSITIVE extends ANYSYNTAX
trait CONST extends ANYSYNTAX
type NUMCONST = NUMERIC with CONST
type POSCONST = POSITIVE with CONST
type ORDINALCONST = DISCRETE with CONST
type INTEGER = NUMERIC with DISCRETE
type …Run Code Online (Sandbox Code Playgroud)