如何使用隐式方式查找转换为具有方法名称的类型?

时间:2012-12-07 17:08:57

标签: 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 }部分。这是否定义了某种匿名类型?

我想这样做,因为当我在代码中看到它并且不知道它从哪里导入时,我想跟踪隐式转换。例如,前几天我看到一些代码在format上调用java.util.Date,而format没有{{1}}。我不知道转换中的哪个导入。

1 个答案:

答案 0 :(得分:5)

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

但该策略将起作用:

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

所以同样的技巧会起作用,而不是价值类。请尝试使用IDE。