Нужно ли импортировать элементы одного объекта в свой класс-компаньон в Scala?
В "Хорошей книге" говорится, что:
Класс и его сопутствующий объект могут обращаться к частным членам других.
Возможно, наивно, я воспринял это как означающее, что классу не нужно явно импортировать членов из своего сопутствующего объекта. I.e, будет работать следующее:
object Foo {
def bar = 4
}
class Foo {
def foo = bar
}
Хорошо, причина, по которой вы читаете это, - это не так. Так мне действительно нужно объявить что-то вроде этого:
class Foo {
import Foo._
def foo = bar
}
Ответы
Ответ 1
Да, так и есть. Там есть доступ, и есть область видимости - у какого класса/объектов класса есть доступ, а не область.
Мне нравится объявлять что-то общедоступное vs private - это не доводит этих членов до всех областей, а просто дает им доступ к нему.
Ответ 2
"Доступ к закрытым членам" означает, что следующие работы:
object Foo {
private def bar = 4
}
class Foo {
def foo = Foo.bar
}
Ответ 3
Да (и я хочу, чтобы мои 15 очков за это!)
Но для расширения их области не перекрываются, поэтому импорт необходим.