Определение нескольких пакетов

Просматривая исходный код API Scala, я встретил это определение пакета в http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_0_final/src/library/scala/util/parsing/combinator/syntactical/StdTokenParsers.scala:

package scala.util.parsing
package combinator
package syntactical

Что это значит? Что класс будет доступен в более чем одной упаковке?

2 ответа

Решение

Это в основном так же, как

package scala.util.parsing.combinator.syntactical

import scala.util.parsing._
import scala.util.parsing.combinator._

...

Таким образом, "укладывая" пакеты так, как вы написали, вы можете получить супер-пакеты в области видимости. Смотрите также эти ответы.

[Обновление] Вот новая статья, написанная Мартином Одерским на эту тему: http://www.artima.com/scalazine/articles/chained_package_clauses_in_scala.html

Справочник Scala упоминает (глава 9, раздел 9.1):

Модуль компиляции состоит из последовательности упаковок, предложений импорта и определений классов и объектов, которым может предшествовать предложение пакета.

Блок компиляции

package p1;
...
package pn;
stats

начало с одного или нескольких предложений пакета эквивалентно единице компиляции, состоящей из упаковки

package p1 { ...
  package pn {
   stats
  } ...
}

См. Также Организация кода в файлах и пространствах имен на вложенных пакетах.
(Из программирования Scala: Масштабируемость = Функциональное программирование + Объекты, Дин Уэмплер, Алекс Пейн, стр. 44, глава 2)

Другие вопросы по тегам