这是原始特征,可以轻松实现而没有任何问题:
trait ZPar[-KNV,+KV] {
def get(i: KNV):List[KV]
}
现在我正在尝试使用边界模拟方差(类似于dotty在做什么)
trait ZPar[KNV,KV] {
def get[R >: KNV](i: R):List[_<:KV]
}
到目前为止看起来不错。直到我尝试实现它:
object ZParImp extends ZPar[String,Int]{
override def get(i: String):List[_<:Int] = {
val v:String = i
List(5)
}
}
//ERROR: method get overrides nothing
方法get
不能像这样被覆盖。
有什么方法可以覆盖方法get
吗?
答案 0 :(得分:2)
如果我们提供一个模仿原始参数的类型参数,它似乎可以工作。
pipeline =make_pipeline(StandardScaler(),MLPClassifier(hidden_layer_sizes=(24,),activation="logistic",solver='lbgfs',alpha=1e-01,random_state=42,tol=1e-4,max_iter=10000))
答案 1 :(得分:2)
我认为您无法完全做到自己想要的。您只知道R >: String
是String
,而不是R
是R
。如果String
是R
,那么您将无法做自己想做的事。
在相反的示例中,Any
由实例而不是方法固定。因此,这种方法实现了相同的目的:
R
但是显然,这种方法有其缺点,并且可能不是您想要实现的。