[英]Parametric polymorphism in scala
我正在尝试实现参数多态性以扩展具有使用asInstanceOf[]
进行大小写匹配的语句的函数。 我需要将参数的类型与项目的另一个接受参数的包中的类匹配。 我已经试过这段代码:
def abc[A](x: A, i: Int): Any =
{
x(i)
}
在运行时,我收到一条错误消息,说A does not take parameters
。 如何将A
与project1.package1
文件夹中的几个类匹配? 这些类类似于数组/向量,并且x(i)
返回第i
个元素。 每个类采用不同的数据类型(例如Int,Double,String等)。
如果这些类接受参数,则它们可能是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)
}
基本上,我们在这里所做的是接受具有类型为Int
的apply
方法的任何类型的子类型,即它接受一个Int
参数。
应该注意的是,如果您尝试将输入类型从Int
推广到任意T
,则结构类型会让您感到悲伤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.