代码之家  ›  专栏  ›  技术社区  ›  Jean-Philippe Pellet

为什么嵌套的伴生对象的成员在类中不自动可见?

  •  8
  • Jean-Philippe Pellet  · 技术社区  · 14 年前

    假设我有这个scala代码:

    object Outer {
    
      object Inner {
        val B = "B"
      }
      class Inner {
        def b = B
      }
    }
    

    我希望它能编译,但是 B 无法从的定义访问 b . 我需要补充 import Inner._ 在里面 class Inner 让它发挥作用。为什么会这样?是伴生对象 Inner 定义不正确?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Vasil Remeniuk    14 年前

    import Inner._


    object Outer {
    
      object Inner {
        def print(inner: Inner) = inner.B // compiles!
      }    
      class Inner {
        private val B = "B"
      }    
    }
    

    scala> object Outer {
         |
         |   object Inner {
         |     def newInstance = new Inner()
         |   }
         |   class Inner private() {
         |     private val B = "B"
         |   }
         | }
    defined module Outer
    
    scala> Outer.Inner.newInstance
    res1: Outer.Inner = Outer$Inner@431693
    
    scala> new Outer.Inner
    <console>:7: error: constructor Inner cannot be accessed in object $iw
           new Outer.Inner
           ^
    
        2
  •  11
  •   Agl    14 年前

    apply() func() this.func()

    import Inner._