这个问题是关于使用泛型类型和设置绑定,所以请不要因为我使用的库而抓狂。把它当作一个例子。
我使用Scalala并使用这样的类型:DenseMatrix[V]、DenseVectorCol[V]和DenseVectorRow[V]。它们常见的超级类型是Tensor[K,V]。注意,Tensor有附加的参数K --所有提到的类Dense...都自己设置了这个类型的K。
因此,我想编写一个带有参数的方法,其上限是Tensor。我为我的方法编写了这样的代码:
def validate[K,T <: Tensor[K,Double]](tensor : T) : T = ...基于这样的意图-- T必须是Tensor的子类型,而且我知道我一直在使用Double的,所以让它成为Double,对于第一个类型的参数(K),从传递的参数中获得它。
它不像我预期的那样工作,因为我得到了错误:
推断类型参数[Nothing,DenseVectorColDouble]不符合方法验证的类型参数界[K,T <:TensorK,Double]
问题:那么如何从传递的参数中提取这个类型的K呢?
发布于 2012-09-15 23:47:50
如果您根本不关心K,可以使用通配符:
def validate[T <: Tensor[_, Double]]: T = ...注意,在某些情况下,这是行不通的(例如,如果您需要返回一个K或在方法中以其他方式使用它),但是假设这不是其中的一种情况,这是一个非常有效的解决方案,类型推断也会很好。
https://stackoverflow.com/questions/12439825
复制相似问题