scala - 如何在 Scala 中使用泛型类型指定泛型类型的绑定(bind)?

标签 scala generics bounds

这个问题是关于使用泛型类型和设置界限,所以请不要因为我使用的库而 panic 。以此为例。

我使用 Scalala 并使用此类类型 DenseMatrix[V]DenseVectorCol[V]DenseVectorRow[V]。它们的常见父类(super class)型是 Tensor[K,V]。请注意,Tensor 有附加参数 K - 所有提到的类 Dense... 都设置此类型 K他们自己。

所以我想编写一个带有参数的方法,其上限类型为Tensor。我为我的方法编写了这样的代码:

def validate[K,T <: Tensor[K,Double]](tensor : T) : T = ...

出于这样的意图 - T 必须是 Tensor 的子类型,而且我知道我一直在使用 Double,所以让它为Double,对于第一个类型参数(K),从传递的参数中获取它。

它没有按我的预期工作,因为我收到错误:

inferred type arguments [Nothing,DenseVectorCol[Double]] do not conform to method validate's type parameter bounds [K,T <: Tensor[K,Double]]

问题:那么如何从传递的参数中提取这种类型K

最佳答案

如果你根本不关心K,你可以使用通配符:

def validate[T <: Tensor[_, Double]]: T = ...

请注意,在某些情况下这不起作用(例如,如果您需要返回 K 或以其他方式在方法中使用它),但假设这不是其中一种情况,这是一个完全有效的解决方案,类型推断效果很好。

关于scala - 如何在 Scala 中使用泛型类型指定泛型类型的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439825/

相关文章:

scala - 为什么Scala中的Final变量可以更改值

第二屏幕上的 javafx 全屏

scala - 错误 : scala: No 'scala-library*.jar' in Scala compiler library

Swift:将类型 T 的数组传递给采用 T 协议(protocol)数组的方法

c# - 为什么我必须指定所有泛型类型参数?

Java:使用泛型指定类型的单个子类型

python - Scipy 优化 Curve_fit 边界错误

cocos2d-iphone - 如何创建一个 CCSprite 来设置边界?

scala - 当缺少必填字段时,是否可以使 json4s 不抛出异常?

scala - 从特征引用构造函数参数