泛型函数中的隐式转换



我需要从Any转换为基本的数字类型,如Int或Double。我通过使用 Scala 隐式实现了这些转换。我的代码类似于这个:

def convertAny[T](any: Any)(implicit run: Any => Option[T]) = run.apply(any)
implicit def anyToDouble(any: Any) = Try(any.asInstanceOf[Double]).toOption
implicit def anyToInt(any: Any) = Try(any.asInstanceOf[Int]).toOption

问题是我需要在像这样的通用函数中进行这些转换:

def doStuffAndConvert[T](i: Any): Option[T] = {
// Some pre-processing
println("Processing data...")
convertAny[T](i)
}

这是对doStuffAndConvert的呼吁:

doStuffAndConvert[Double](a)

但是,编译器会引发此错误:

Error:(40, 18) No implicit view available from Any => Option[T].
convertAny[T](i)

我试图通过包装 Int 和 Double 类型并将T泛型类型绑定来帮助编译器,但它不起作用。

我该如何解决它?

谢谢。

你需要添加隐式参数convertAny还需要doStuffAndConvert

def doStuffAndConvert[T](i: Any)(implicit run: Any => Option[T]): Option[T] = {
// Some pre-processing
println("Processing data...")
convertAny[T](i) // or just i, the implicit will be used anyway
}

anyToDouble/Int这样的暗示在我看来很可疑,但这可能只是一种下意识的反应。

相关内容

  • 没有找到相关文章

最新更新