嗨,我有一个隐含的方法,如:
implicit def strToOpt(str: String): Option[String] = Option(str)
它适用于简单的转换,但是当我输入
时implicitly[String]
我得到了
error: could not find implicit value for parameter e: String
REPL在查找隐含方面是否有一些限制?
答案 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]
。