upd我有一个接受存在类型的函数:
trait QueryValue[V]
trait QueryValueFormats {
implicit object IntQueryValue extends QueryValue[Int]
implicit object StringQueryValue extends QueryValue[String]
}
trait Magnets {
trait NumericCol[C]
implicit def numericFromInt[T <: Int](s: T)(implicit evidence: QueryValue[T]): NumericCol[T] = new NumericCol[T] {}
implicit def numericFromString[T <: String](s: T)(implicit evidence: QueryValue[T]): NumericCol[T] = new NumericCol[T] {}
}
object Hello extends App with Magnets with QueryValueFormats {
//function accept only existentials
def existentialsOnly(coln: NumericCol[_]*): Unit = println("stub")
existentialsOnly(1, "str")//not compiles
}
它使用 2.12 编译,但使用 2.13 - 不是:
[error] ..//Hello.scala:21:20: type mismatch;
[error] found : Int(1)
[error] required: example.Hello.NumericCol[_]
[error] existentialsOnly(1, "str")
[error]
我尝试删除存在主义(只是一些尝试):
def existentialsOnly[T: ClassTag](coln: NumericCol[T]*): Unit
这使得代码可编译,但如果coln
只有单一类型。例如:
existentialsOnly("str", "str")
那么,在第一种情况下如何正确使用存在主义呢?2.13 的当前用法是否错误?