我有一个类似于以下情况的用例:
x
我理解我需要将特征中定义的# attempt 1 #
class B extends A { .... } /// doesn't work
# attempt 2 #
class B extends A {
val x1 = implicitly[String] /// doesn't work either
def run(x: Int)(implicit y: String) = y + x
}
置于B的隐含范围内。我已经尝试过以下内容:
www.test.com/page/?u=test
请解释我在这里缺少的东西(或者,请指出我可以学习的相关理论主题,对于scala来说还是新手)。
答案 0 :(得分:2)
将整个代码包装在一个对象中,并在trait A
中扩展class B
:
object P {
trait A {
implicit val x = "hello"
}
class B extends A {
def run(y: Int) = y + x
}
def f = println(new B().run(3))
}
输出:
scala> P.f
3hello
答案 1 :(得分:2)
'隐含的y'将在您的println-line中解决,因为它不可用。您在类的主体中隐式可用变量,但那里不需要隐式String的解析。
隐含的不是魔法;如果你不能明确地达到隐含变量,那么编译器就可以了。
你真的想解决什么问题?