What is the _root_ package in Scala?

2019-01-18 08:47发布

问题:

I'm using IntelliJ IDEA with the Scala plugin. If I reference HashMap in code, and then use Alt-Enter to add the import, the package gets imported as:

_root_.scala.collection.immutable.HashMap

What's the root part of this? It seems to work with and without it.

回答1:

It has to do scala imports being relative - _root_ gives you a way to specify an absolute package name. See the Scala Wiki



回答2:

The Scala language specification has this to say about _root_ in section 9.4 Package References

The special predefined name _root_ refers to the outermost root package which contains all top-level packages.

See the following PDF for the full language reference: http://www.scala-lang.org/docu/files/ScalaReference.pdf



回答3:

You would only need it if inside your current package you had a nested package scala.collection.immutable containing HashMap. This would be preferred by a relative import without the _root_ part.

Edit: That was not quite right, the problems start already if you have a scala package either as an ancestor or nested in the current package.