#scala
#scala
Вопрос:
Я новичок в scala и пытаюсь следовать руководству по документации. Я понимаю, что this
это используется для «доступа» к методам или полям класса, но в этом блоке кода это вызывается как без какой-либо «опции», но по умолчанию вызывается метод «toString».
Вот блок кода, о котором я говорю
class Person(var firstName: String, var lastName: String) {
println("the constructor begins")
// 'public' access by default
var age = 0
// some class fields
private val HOME = System.getProperty("user.home")
// some methods
override def toString(): String = s"$firstName $lastName is $age years old"
def printHome(): Unit = println(s"HOME = $HOME")
def printFullName(): Unit = println(this)
printHome()
printFullName()
println("you've reached the end of the constructor")
}
Вывод в REPLL:
scala> val p = new Person("Kim", "Carnes")
the constructor begins
HOME = /Users/al
Kim Carnes is 0 years old
you've reached the end of the constructor
p: Person = Kim Carnes is 0 years old
Комментарии:
1.
println
вызываетtoString
метод того, что ему передается. Таким образом, сам объект был переданprinrln
функции, которая затем вызвалаtoString
его. Имеет ли это смысл?2. Братан, спасибо. Теперь это имеет смысл. Я просто попробовал удалить метод переопределения, и мне стало более понятно. Ценю это, приятель, спасибо.
Ответ №1:
Благодаря Луису. Его ответ:
println вызывает метод toString всего, что ему передается. Таким образом, сам объект был передан функции println, которая затем вызвала для него toString . Имеет ли это смысл?
По сути, println(this)
имеет тот же вывод, что и при вызове println(p)
.