2014-10-30 3 views
3

В чем разница междуПараметры Scala для модификаторов доступа?

class Test { 
    private[this] val foo = 0 
} 

против

class Test { 
    private val foo = 0 
} 

Что все может пойти внутри []? Кроме того, что я должен искать, когда я хочу посмотреть спецификации этого? Я попытался использовать различные сочетания «аргументов модификатора доступа scala/параметризованного модификатора доступа scala», и ничего не получилось.

ответ

3

Первый частный, например, класс, второй для класса. Если вы используете вторую версию, у вас есть доступ из другого экземпляра класса Test (полезно для метода equals или аналогичного).

+0

Спасибо! Можете ли вы указать мне куда-нибудь, где это задокументировано? – pathikrit

+0

См. «Объем защиты» по адресу http://www.artima.com/pins1ed/packages-and-imports.html. –

4

Что я должен искать, когда я хочу посмотреть характеристики этого?

В The Scala Language Specification он определен как «модификатор доступа» и «квалификатор доступа» (см. BNF в §5.2).

В чем разница между

...

Что все может пойти внутри []?

Вы можете поместить имя класса, название пакета или this. Вот соответствующая цитата из языка спецификации, что объясняет это (см §5.2 для более подробной информации):

Модификатор может быть квалифицировано с идентификатором C (например, в частных [C]), который должен обозначать класс или пакет включая определение. Члены, помеченные , такие модификаторы доступны, соответственно, только из кода внутри пакета C или только из кода внутри класса C и его компаньона (§5.4).

Другая форма квалификации является частной [это]. Член M, помеченный с этим модификатором, называется защищенным объектом; к нему можно получить доступ только от в пределах объекта, в котором он определен. То есть выбор p.M является только законным, если префикс - это или O.это, для некоторого класса O, охватывающего ссылку. В дополнении применяются ограничения для неквалифицированных частных лиц.