REPL无法找到隐含的

时间:2014-08-11 08:24:10

标签: scala implicit-conversion read-eval-print-loop

嗨,我有一个隐含的方法,如:

implicit def strToOpt(str: String): Option[String] = Option(str)

它适用于简单的转换,但是当我输入

implicitly[String]

我得到了

error: could not find implicit value for parameter e: String

REPL在查找隐含方面是否有一些限制?

1 个答案:

答案 0 :(得分:4)

我认为你误解了implicitly。它被定义为:

def implicitly[T](implicit e: T): T = e

大致意味着,implicitly[T]将返回一个类型为T的对象,该对象在当前作用域中可用(作用域不是准确的单词。编译器会查看许多places)< / p>

在您的情况下,执行implicitly[String]只是意味着某些String类型的对象可用。

例如,这是有效的:

scala> implicit val x = "Hey"
x: String = Hey

scala> implicitly[String]
res12: String = Hey

但你宁愿做的是:

scala> implicitly[(String) => Option[String]]
res10: String => Option[String] = <function1>

scala> res10("asd")
res11: Option[String] = Some(456)

PS:@Ende Neu的注释答案如下:

implicitly[Option[String]]("123")

执行implicitly[Option[String]]("123"),在隐式函数中,T作为参数String。但是您已手动提供Option[String]作为方法的类型参数。因此,编译器再次搜索一个函数(再次使用implicitly),它会在函数中找到它String => Option[String]