scala中的参数多态

时间:2017-02-26 21:37:11

标签: scala types parameters polymorphism parametric-polymorphism

我正在尝试实现参数多态来下载具有使用asInstanceOf[]的大小写匹配语句的函数。我需要将参数类型与接受参数的项目的另一个包中的类相匹配。我试过这段代码:

def abc[A](x: A, i: Int): Any =
{
    x(i)
}

在运行时,我收到错误A does not take parameters。如何将Aproject1.package1文件夹中的几个类匹配?这些类类似于Array / Vector和x(i)返回i元素。每个类采用不同的数据类型(如Int,Double,String等)。

1 个答案:

答案 0 :(得分:3)

如果类接受参数,则可能Function1的子类型。不幸的是并非所有

所以你可以写:

def abc[A <: Function1[Int, _]](x: A, i: Int): Any = {
    x(i)
}

但这对于带有参数的所有对象都不起作用,例如案例类伴随对象。因此,为了解决这个问题,您可以使用结构类型。类似的东西:

 def abc[A <: {def apply(i: Int): Any } ](x: A, i: Int): Any = {
    x(i)
}

基本上我们在这里做的是接受任何类型的子类型,其apply方法带有Int,即它需要Int个参数。

应该注意的是,如果您尝试将输入类型从Int推广到任意T

,结构类型会让您感到悲伤