scala中的包名称查找规则

时间:2015-07-19 08:29:38

标签: scala

我从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中的包名查找规则是什么?

2 个答案:

答案 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_是隐式顶级包,可用于模拟绝对路径。