【问题标题】:Why is this Scala example of implicit parameter not working?为什么这个隐式参数的 Scala 示例不起作用?
【发布时间】:2011-02-12 02:44:05
【问题描述】:

简单的 REPL 测试...

def g(a:Int)(隐式 b:Int) = {a+b}

为什么这些尝试的用法都不起作用?

1.

scala> 类 A { var b:Int =8;变量 c = g(2) } :6:错误:找不到参数b的隐式值:Int 类 A { var b:Int =8;变量 c = g(2) }

2.

scala> 类 A(var b:Int) { var c = g(2) } :6:错误:找不到参数b的隐式值:Int 类 A(var b:Int) { var c = g(2) } ^

谢谢

【问题讨论】:

    标签: scala language-features scala-2.8


    【解决方案1】:

    您需要将 b 定义为隐含在 A 中

    scala> def g(a:Int)(implicit b:Int) = {a+b}
    g: (a: Int)(implicit b: Int)Int
    
    scala> class A { implicit var b:Int =8; var c = g(2) }
    defined class A
    
    scala> val a = new A
    a: A = A@1f7dbd8
    
    scala> a.c
    res3: Int = 10
    

    一般情况下,只会考虑定义为隐式的值/方法,并在范围内或在所需类型的伴随对象(在本例中为 Int)中搜索它们

    【讨论】:

      【解决方案2】:

      您必须指定哪个 var 或 val 将用作隐式值:

      scala> def g(a:Int)(implicit b:Int) = {a+b}
      g: (a: Int)(implicit b: Int)Int
      
      scala> class A {  implicit var b:Int =8; var c = g(2) }
      defined class A
      
      scala> new A
      res0: A = A@16b18b6
      
      scala> res0.c
      res1: Int = 10
      
      scala> class A(implicit var b:Int) { var c = g(2) }
      defined class A
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 2018-06-12
        • 2014-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多