定义多个隐式值时无法解析符号 X

Cannot resolves symbol X, when defining multiple implicit vals

我正在测试下面显示的一些代码,这些代码基本上定义了多个隐式 vals,将字符串作为输入并将其转换为相应的类型。

我遇到的问题是 toLongtoDoubletoInt 等转换由于某种原因无法解决。

class Parse[T](val f: String => T) extends (String => T) {
  def apply(s: String): T = f(s)
}

object Parse {
  def apply[T](f: String => T) = new Parse[T](f)

  implicit val parseLong: Parse[Long] = Parse[Long](s => s.toLong)
  implicit val parseDouble: Parse[Double] = Parse[Double](s => s.toDouble)
  implicit val parseInt: Parse[Int] = Parse[Int](s => s.toInt)
}

这段代码有什么问题?

问题在于,由于 Parse 扩展了 String => T,隐式 parseLongparseDoubleparseInt 不仅定义了 [=11= 的实例] 还有隐式转换 String => LongString => DoubleString => Int。由于 .toLong.toDouble.toInt 是扩展方法,因此会产生歧义。

您可以删除 extends (String => T) 或手动解析扩展方法:

object Parse {
  def apply[T](f: String => T) = new Parse[T](f)

  implicit val parseLong: Parse[Long] = Parse[Long](s => new StringOps(s).toLong)
  implicit val parseDouble: Parse[Double] = Parse[Double](s => new StringOps(s).toDouble)
  implicit val parseInt: Parse[Int] = Parse[Int](s => new StringOps(s).toInt)
}