Первое объявление использует name
и age
в качестве аргументов конструктора, но они не становятся членами класса, то есть вы не можете написать person.name
.
Для новичка вторую строку можно считать более сложным способом написания class Person(var name: String = " ", var age: Int = 0)
. На самом деле это не означает, что ваша версия создает класс с одним аргументом конструктора и двумя открытыми переменными, а у моей - конструктор с 2 аргументами, значения которых по умолчанию. Если у вас нет веской причины объявить это по-своему, обычно лучше написать:
val person = new Person("Andrew", 11)
чем
val person = new Person()
person.name = "Andrew"
person.age = 11
что и заставит вас делать вторая версия.
Обратите внимание, что в Scala вы будете в основном использовать значения (константы), а не переменные, поэтому обычно вы используете class Person(val name: String = " ", val age: Int = 0)
. Для простых типов данных, подобных этому, люди обычно используют case class
:
case class Person(name: String, age: Int)
В этом случае оба аргумента считаются публичными и неизменными. Единственный способ изменить имя человека - создать еще один экземпляр Person
с новым именем:
val andrew = Person("Andrew", 11)
val will = andrew.copy(name="Will") # Will is also 11
Классы Case автоматически предоставят вам правильную реализацию equals
и hashCode
, а также метод copy
, который я использовал выше. Вы можете легко найти больше информации о них в Интернете.