再次解释命名优先级?我有点陷入困境

时间:2014-02-12 18:34:49

标签: scala

我看到一个名字绑定的测试用例让我走吧?所以这里是简单规则的概述。我确信已在许多博客文章和SO问题中对此进行了审核。

测试用例Top确保PrimaryKey不明确。

“啊?”我认为进口是“低优先级”。为什么不编译?

为什么它只是花括号内的问题(见X2)?

package imps

object X {
  object Y {
    val Z = 7
  }
  object A {
    val Z = 9
    import Y.Z
    println(Z)
  }
}

object X2 {
  object Y {
    val Z = 7
  }
  object A {
    val Z = 9
    locally {
      import Y.Z
      println(Z)
    }
  }
}

object Top {
  object ColumnOption {
    object PrimaryKey
  }

  class A {
    def PrimaryKey: Any = ???

    {
      import ColumnOption._

      (null: Any) match { case PrimaryKey => }

      PrimaryKey // was already ambigious in 2.10.3
    }
  }
}

1 个答案:

答案 0 :(得分:1)

这是规范第2章开头的简单说明。出于某种原因,我没有内化它,所以在这里,外化。

测试用例Top确保PrimaryKey不明确。

我认为导入是“次要优先级”,所以我尝试编译X

但是在嵌套范围内,请参阅X2,导入变得模棱两可。

原因是在范围内,请参阅X,本地Z的优先级高于导入的Z

但是在嵌套作用域中,val Z不再是作用域的本地,因此它在“范围内”而不是“本地”。此外,导入的Z不会影响它,正如规范所说,因为它具有较低的优先级。因此关于模糊Z的错误。