Ответ 1
Синтаксис можно использовать без скобок, как показывает ваш пример, но я никогда не видел этого в "реальной жизни". Я думаю, что почти всегда новая функция просто используется для получения родительских пакетов в области видимости:
package bobrockets.navigation
package tests
//now the content of bobrockets.navigation is in scope
Это в основном то же самое, что писать
package bobrockets.navigation.test
import bobrockets.navigation._
Однако первая версия следует принципу DRY. Например. если вы переименуете пакет bobrockets в robertsrockets, вы можете забыть изменить импорт во второй версии (что может указывать на некоторый "старый" код), что невозможно в первой версии. В некотором смысле это (вместе с возможностью иметь модификаторы, такие как private[bobsrockets.navigation]
) позволяет использовать группы пакетов как "модули" или "суперпакеты" с очень легким синтаксисом.
Это основное использование, о котором я знаю, но Scala показывает часто неожиданные синергетические эффекты и размывает линии (например, между объектами, пакетами и объектами пакета, между vals и объектами, между defs и функциями и т.д.). интересными способами. Поэтому в будущем будет показано, есть ли у этой функции другие полезные приложения.
[Обновить] Вот новая статья по этому вопросу самого Мартина Одерского: http://www.artima.com/scalazine/articles/chained_package_clauses_in_scala.html p >