scala - 如何隐式地使用方法名称来查找到类型的转换?

标签 scala implicit-conversion

在另一个答案中here他们给出了以下代码示例:

scala> implicitly[Int => { def min(i: Int): Any }]
res22: (Int) => AnyRef{def min(i: Int): Any} = <function1>

这在我的 scala 控制台 (2.10.0-RC2) 中不起作用。

scala> implicitly[Int => { def min(i: Int): Any }]
<console>:8: error: No implicit view available from Int => AnyRef{def min(i: Int): Any}.
          implicitly[Int => { def min(i: Int): Any }]
                    ^
scala> 12 min 11
res15: Int = 11

新的方法是什么?无论如何,这个语法意味着什么?我不熟悉它——特别是用作类型表达式的 { def min(i: Int): Any } 部分。这是定义某种匿名类型吗?

我想这样做是因为当我在代码中看到隐式转换并且不知道它是从哪里导入时,我想追踪它。例如,有一天我看到一些代码在 java.util.Date 上调用 format,但它没有 format。我不知道哪个导入拉动了转换。

最佳答案

您不会找到 min 因为 RichInt 现在是一个值类(它不适用于结构类型 - 它必须是一个 AnyRef)。

但该策略将在其他情况下发挥作用:

scala> implicitly[Option[Int] => { def iterator: Iterator[Int] }]
res29: Option[Int] => AnyRef{def iterator: Iterator[Int]} = <function1>

所以同样的技巧也可以工作,只是不适用于值类。尝试使用 IDE。

关于scala - 如何隐式地使用方法名称来查找到类型的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767734/

相关文章:

scala - 使用 Argonaut Lenses 从 JSON 对象的 JSON 数组中提取值

scala - NoClassDefFoundError : Could not initialize XXX class after deploying on spark standalone cluster

c++ - 为什么在这种情况下 friend 重载运算符优于转换运算符

scala - 如何从 Spark mllib 中的交叉验证获得准确度、召回率和 ROC?

scala - 如何合并左两个列表?

scala - 对单元测试进行分组并仅运行一组

scala - 如何在 Scala 中链接隐式?

scala - 为什么 javaBigDecimal2bigDecimal 隐式不适用?

mysql - mysql 中奇怪的转换行为

scala - 这个 "simple"ScalaZ 教程代码示例中的隐式解析序列是什么?