2015-08-30 2 views
3

Я пытаюсь определить, что val константа виден только один объект:Как ограничить частную сферу Scala только одним объектом?

object Config { 
    private[my.pack.MyObject] val Some = Option("String") 
} 

// in package my.pack 
object MyObject { 
    val Other = Config.Some 
} 

При составлении этого я получаю сообщение об ошибке:

[error] C:\path\Config.scala:17: ']' expected but '.' found. 
[error] private[my.pack.MyObject] val Some = Option("String") 
[error]   ^

Что не так? Поскольку я читал о квалификаторах доступа, они могут быть классом или объектом, а не пакетом, я ошибаюсь?

+0

Итак, вы хотите ограничить доступ к 'val Some' объекту, отличному от объекта назначения? Я могу быть просто смущен, но если 'Config' сможет присвоить значение' Some', если у него нет доступа к нему? Можете ли вы объяснить немного больше об использовании? –

+1

Это было бы довольно странно, если бы вы могли сделать так, чтобы объект 'Config' не имел доступа к его собственному' val'. –

ответ

6

От the Scala Language specification, section 5.2.1:

A private modifier can be qualified with an identifier C (e.g. private[C]) that must denote a class or package enclosing the definition. Members labeled with such a modifier are accessible respectively only from code inside the package C or only from code inside the class C and its companion module.

(полужирный шахта - обратите внимание, что «класс или пакет» также допускает «объект», не уверен, если это стандартный язык в спецификации, или ошибка в спецификации)

Так что ваш пример не компилируется, потому что my.pack.MyObject не является , в котором содержится. Объявление val Some.

Смежные вопросы