Scala模板限制

时间:2013-04-12 08:37:24

标签: scala templates

在Scala中,是否有可能对模板化类型提供任意限制?在我正在处理的特定情况下,我有一个包含两个模板参数的类,如下所示:

class TwoWayMap[S,T]( )
{
    ...
}

我正在尝试围绕一对地图的薄包装,允许用户在两​​个方向上查找键。限制两种类型不相同将允许根据类型查找值,允许我写下以下两种:

def apply( t : T )
def apply( s : S )

但显然如果类型相同,这不起作用,所以我想限制S!= T

2 个答案:

答案 0 :(得分:2)

由于Java类型擦除,def apply(t: T)def apply(s: S)将导致def apply(...: Object),这将是不明确的。

因此,即使你发现S != T的限制,这也是不可能的。

答案 1 :(得分:1)

除了Joa Ebert所写的内容之外:解决这个问题的一种可能方法是使用Either类型:

class TwoWayMap[S,T] {
    def apply(k:Either[S,T]):Either[S,T] = k match {
        case Left(s) => Right(tForS(s))
        case Right(t) => Left(sForT(t))
    }
    // ...
}

也许这对你来说太过模糊了。