有人可以通过下面的错误消息解释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)
}
Run Code Online (Sandbox Code Playgroud)
编译说:
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.
Run Code Online (Sandbox Code Playgroud)
当我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)
}
Run Code Online (Sandbox Code Playgroud)
我知道ClassTag添加一个隐含的类型信息来克服擦除,但我不明白这与我的排序隐式参数有什么关系,或者为什么编译器突然认为排序没有价值......
这个:
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T = data
Run Code Online (Sandbox Code Playgroud)
这是语法糖:
def apply[T](data: T)(implicit evidence: ClassTag[T], ordering: Ordering[T]): T = data
Run Code Online (Sandbox Code Playgroud)
显式指定隐式参数时,必须同时提供这两个参数.你可以implicitly用来继承隐含的ClassTag:
object Other {
def apply[T: ClassTag](data: T)(implicit ordering: Ordering[T]): T =
Some(data)(implicitly, ordering.reverse)
}
Run Code Online (Sandbox Code Playgroud)