У меня есть следующие установки класса:Почему я не могу получить доступ к переменной-члену объектов?
class MyClass {
class MyInnerClass(memberVar: String)
def getAInner: MyInnerClass = {
new MyInnerClass("hello")
}
}
Тогда у меня есть следующий код вне класса:
def myFunction = {
val a = new MyClass
val b = a.getAInner.memberVar // value memberVar is not a member of a.MyInnerClass
}
Почему это?
Можете ли вы предоставить некоторую информацию о том, что именно делает класс case? Это в основном превращает экземпляры класса в структуры? – Max
@Max добавил пару ссылок. В зависимости от того, что вы подразумеваете под «структурой», я думаю, вы могли бы сказать, что это правильно. Это в основном просто автоматическое включение кучи синтаксического сахара. Я хочу 99% времени, чтобы включить идиоматическую функциональность Scala, такую как сопоставление шаблонов и падение «нового» и т. Д. – acjay
@acjay с классами case, у вас есть возможность вырезать ключевое слово 'new', которое менее идиоматично в контексте нормального класса. Примерами классов case являются 'Some' и' None', которые не должны быть 'new''ed. классы case предназначены для «обертывания» объектов в классах; в случае вышеприведенного примера ничего не нужно обертывать (например, с 'Some' или' Left' или 'Success', например), поэтому использование классов case в этом случае не является идиоматическим. Другой способ задуматься над этим: «Если вам не нужно сопоставлять шаблоны, не используйте класс case» –