2012-04-08 1 views
1

Блуждая ScalaQuery исходного кода я нашел такие заявления (многие из рода на самом деле):Что означает [сеанс] в Scala?

private[session] val dyn = new DynamicVariable[Session](null) 

и

def forDataSource(ds: DataSource): Database = new Database { 
    protected[session] def createConnection(): Connection = ds.getConnection 
} 

Что это значит? [session] И я думал, что функция, определенная внутри функции, не может быть protected ...

ответ

3

Но createConnection не внутри forDataSource, это внутри Database - см new Database { на предыдущей строке?

Это означает, что все в области session (которое может быть классом, объектом или пакетом - я не знаю) может видеть это определение, плюс классы, которые расширяют Database.

+0

сеанс в этом случае является областью упаковки – virtualeyes

0

private[<scope>] модификатор означает «частный для объема», то есть только классы, которые принадлежат к (пакету или классу) объема имеют доступ к члену.

protected[<scope>] означает, что только классы, которые расширяют этот класс и принадлежат сфере имеют доступ к члену.

Помимо этого, существует также private[this], что означает, что элемент виден только внутри конкретного экземпляра класса.