как пример может иметь два пакета с одинаковым именем - PullRequest
1 голос
/ 25 июня 2019

Обращаясь к примеру по адресу https://www.scala -lang.org / files / archive / spec / 2.11 / 02-identifiers-names-and-scopes.html , я заметил, что package Pопределяется дважды в примере.Разве этот пример неверен?Я пытался запустить его в Scastie, но код не компилируется.

https://scastie.scala -lang.org / ZZ3vjsNzSvWnY1gFCqaNAg

    package P {
      object X { val x = 1; val y = 2 }
    }

    package Q {
      object X { val x = true; val y = "" }
    }
//    The following program illustrates different kinds of bindings and precedences between them.

//isn't this redefining P??    
    package P {                  // `X' bound by package clause
    import Console._             // `println' bound by wildcard import
    object A {
      println("L4: "+X)          // `X' refers to `P.X' here
      object B {
        import Q._               // `X' bound by wildcard import
        println("L7: "+X)        // `X' refers to `Q.X' here
        import X._               // `x' and `y' bound by wildcard import
        println("L8: "+x)        // `x' refers to `Q.X.x' here
        object C {
          val x = 3              // `x' bound by local definition
          println("L12: "+x)     // `x' refers to constant `3' here
          { import Q.X._         // `x' and `y' bound by wildcard import
    //      println("L14: "+x)   // reference to `x' is ambiguous here
            import X.y           // `y' bound by explicit import
            println("L16: "+y)   // `y' refers to `Q.X.y' here
            { val x = "abc"      // `x' bound by local definition
              import P.X._       // `x' and `y' bound by wildcard import
    //        println("L19: "+y) // reference to `y' is ambiguous here
              println("L20: "+x) // `x' refers to string "abc" here
    }}}}}}

1 Ответ

0 голосов
/ 25 июня 2019

Это не переопределение, это добавление к пакету P, например

package P {
  object X { val s = "hello"}
}
package P {
  object Y { val s = "world"}
}

object Hello extends App {
  println(P.X.s)
  println(P.Y.s)
}

выходы

hello
world

, что означает X и Y, теперь доступны из пакета P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...