gpt4 book ai didi

scala - 隐式参数和 ClassTag

转载 作者:行者123 更新时间:2023-12-04 23:01:16 27 4
gpt4 key购买 nike

有人可以用下面的错误消息解释 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)
}

我知道 ClassTag添加一个隐式的类型信息来克服删除,但我不明白这与我的排序隐式参数有什么关系,或者为什么编译器突然认为排序没有值(value)......

最佳答案

这个:

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)
}

关于scala - 隐式参数和 ClassTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com