Scala包delcaration - 一种方式导致包对象可见,其他使得它不是?

dav*_*000 4 scala package

foo/bar/my_package/package.scala:

package foo.bar
package object my_package {
  type SomeType = java.lang.String
}
Run Code Online (Sandbox Code Playgroud)

然后,在 foo/bar/my_package/my_sub/MyClass.scala

package foo.bar.my_package.my_sub

class MyClass {
  var x: SomeType = _
}
Run Code Online (Sandbox Code Playgroud)

这无法编译; SomeType找不到.如果我换MyClass.scala

package foo.bar.my_package
package my_sub

class MyClass {
  var x: SomeType = _
}
Run Code Online (Sandbox Code Playgroud)

一切正常.有什么不同!?!??!

(这是Scala 2.8.1)

Rex*_*err 5

包装声明(如导入)使您可以访问其中的所有内容.所以,当你

package foo.bar.my_package
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你就拥有了所有可用的东西

import foo.bar.my_package._
Run Code Online (Sandbox Code Playgroud)

此外,在单行上声明包意味着下面的所有内容都属于该包:

package foo.bar.my_package {
  package my_sub {
    class MyClass { var x: SomeType = _ }
  }
}
Run Code Online (Sandbox Code Playgroud)

(相当于:

package foo.bar.my_package
package my_sub
class MyClass { var x: SomeType = _ }
Run Code Online (Sandbox Code Playgroud)

)

所以你可以看到foo.bar.my_package在这种情况下内容应该如何.在另一种情况下,您只有foo.bar.my_package.my_sub可用的内容,但不包括SomeType.