来自特质的隐含决议

时间:2015-06-26 11:55:43

标签: scala

我有一个类似于以下情况的用例:

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来说还是新手)。

2 个答案:

答案 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的解析。

隐含的不是魔法;如果你不能明确地达到隐含变量,那么编译器就可以了。

你真的想解决什么问题?