Разъяснение по ключевому слову `this` в Scala

#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) .