我从Java出来scala programmin所以我不清楚我们应该如何在Scala中使用相对导入以及确切的名称查找规则是什么?假设我有以下内容:
pack.age
|
|----MyClass.scala
com.age
|
|---AnotherClass.scala
我需要将MyClass.scala
导入AnotherClass.scala
。由于Scala仅支持相对导入,因此我写了以下内容:
import _root_.pack.age.MyClass
它工作正常。但是当我尝试从那里删除_root_
时,也没有编译时错误。
import pack.age.MyClass
也可以。
那么,Scala中的包名查找规则是什么?
答案 0 :(得分:3)
我相信这里有一个操作顺序。如果你在com.age(即com.age.package.age.MyClass)中有package.age.MyClass,以及package.age.MyClass,那么前者将被选中。如果您想要后者,则需要使用 root 语法。
由于只有一个地方可以从(在 root 中)获取此类,这就是拾取的包。
答案 1 :(得分:3)
所有导入都是相对的,因此有时会出现冲突。例如,如果您有package com.org.project.scala
,那么下一个import scala._
也会查找系统包。 _root_
是隐式顶级包,可用于模拟绝对路径。