scala 对象myClass不是包的成员< root>

h4cxqtbf  于 2023-04-30  发布在  Scala
关注(0)|答案(1)|浏览(140)
object myClass is not a member of package <root>
import _root_.myClass
//test1.scala 
import _root_.myClass

object test1 {
  def main(args:Array[String]): Unit = {
    println(this.getClass.getName)
  }
}
//myClass.scala 
case class myClass(){
}

一切...重命名类以包含 root。..请注意它们不在同一个文件中

eqqqjvef

eqqqjvef1#

实际上,myClass不是_root_包的成员。它在_empty_包里。
如果将所有内容都放在mypackage包中,则可以使用_root_导入

  • src/main/scala/mypackage/test1。Scala*
package mypackage

import _root_.mypackage.myClass

object test1 {
  def main(args:Array[String]): Unit = {
    println(this.getClass.getName)
  }
}
  • src/main/scala/mypackage/myClass.Scala*
case class myClass()

对于我的代码中的myClassscala.reflect.runtime.universe.symbolOf[myClass].owner返回package mypackage。对于代码中的myClass,它返回package <empty>
下面引用了几句话:
https://scala-lang.org/files/archive/spec/2.13/09-top-level-definitions.html
包外的顶级定义被假定为注入到一个特殊的空包中。该包无法命名,因此无法导入。然而,空包的成员彼此可见而没有限定。
如果一个包名被隐藏了,可以通过使用特殊的预定义名称_root_作为前缀来引用它的完全限定名,该名称引用包含所有顶级包的最外层根包。
名称_root_只有在用作限定符的第一个元素时才具有这种特殊表示;否则它是普通标识符。
What is the root package in Scala?
scala: can't import object from root scope
Why is my object not a member of package if it's in a separate source file?

相关问题