scala> trait Resource[A] { def f: String }
defined trait Resource
scala> case class Foo(x: String)
defined class Foo
然后一个隐含的:
scala> implicit def fooToResource(foo: Foo): Resource[Foo] =
new Resource[Foo] { def f = foo.x }
以下工作:
scala> implicitly[Resource[Foo]](Foo("foo")).f
res2: String = foo
我定义的函数:
scala> def f[A](x: A)(implicit ev: Resource[A]): String = ev.f
f: [A](x: A)(implicit ev: Resource[A])String
然而,下面的代码无法编译:
scala> f(Foo("foo"))
<console>:17: error: could not find implicit value for parameter ev: Resource[Foo]
f(Foo("foo"))
其次,然后我想:
scala> f2(Foo("bippy"))
<console>:17: error: could not find implicit value for parameter ev: Resource[Foo]
f2(Foo("bippy"))
^
最后,我尝试:
scala> def g(foo: Foo)(implicit ev: Resource[Foo]): String = ev.f
g: (foo: Foo)(implicit ev: Resource[Foo])String
scala> g(Foo("5"))
<console>:17: error: could not find implicit value for parameter ev: Resource[Foo]
g(Foo("5"))
^
然而,它没有了。我该如何修复f
?
有关'隐式地“的额外信息对我的回答确实是一个很好的补充,谢谢@Didier Dupont。 –
谢谢。一开始对我来说毫无意义,所以我认为它可能值得分享 –
'我相信没有合理的理由这样做,永远'没有理由去做什么?你能否详细说明一下? –