有人可以解释一下 Scala 编译器试图用下面的错误消息告诉我什么吗?
object Some {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
编译器说:
not enough arguments for method apply: (implicit evidence$2: scala.reflect.ClassTag[T], implicit ordering: Ordering[T])T in object Some. Unspecified value parameter ordering.
当我添加时出现错误ClassTag
到对象中的方法Some
,以便在那里使用一些内部数组。最初,代码是(并且编译没有错误):
object Some {
def apply[T](data: T)(implicit ordering: Ordering[T]): T = data
}
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(ordering.reverse)
}
I know ClassTag
添加带有类型信息的隐式以克服擦除,但我不明白这与我的隐式参数排序有什么关系,或者为什么编译器突然认为排序没有价值......
This:
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T = data
是语法糖:
def apply[T](data: T)(implicit evidence: ClassTag[T], ordering: Ordering[T]): T = data
当您显式指定隐式参数时,您必须同时提供它们。您可以使用implicitly
继承隐含的ClassTag
:
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(implicitly, ordering.reverse)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)