📜  Scala this 关键字(1)

📅  最后修改于: 2023-12-03 14:47:16.821000             🧑  作者: Mango

Scala中的this关键字

在Scala中,this关键字用于引用当前实例。这意味着,无论在哪个作用域中,this都指向当前正在使用的对象。

构造器中的this

在Scala中,可以使用this关键字显式地调用同一类的其他构造器。这样做的语法是使用this调用其他构造器时,调用语句必须是类定义中的第一条语句。

以下是使用this在构造器中调用其他构造器的示例:

class Person(val name: String, val age: Int) {
  def this(name: String) = this(name, 0)
}

在上面的示例中,Person类定义了一个具有两个参数的主构造函数。它还定义了一个带有一个参数的辅助构造函数。辅助构造函数使用this调用主构造函数,并将第二个参数设置为0。

this.type

在Scala中,this.type类型表示指向同一实例的类类型。可以使用this.type将方法修饰为返回实例类型,以支持链式调用。

以下是使用this.type实现链式调用的示例:

class BankAccount(private var balance: Double) {
  def deposit(amount: Double): this.type = {
    balance += amount
    this
  }

  def withdraw(amount: Double): this.type = {
    balance -= amount
    this
  }
}

val account = new BankAccount(100.0)
account.deposit(50.0).withdraw(20.0) // 返回同一实例

在上面的示例中,BankAccount类定义了两个方法: depositwithdraw, 这两个方法返回this.type。 这使得可以使用链式调用来更轻松地执行多个功能。

嵌套类中的this

在Scala中,嵌套类具有访问其外部类实例的权限。可以使用this关键字引用外部类的实例。

以下是在嵌套类中使用this引用外部类实例的示例:

class OuterClass {
  private val x = 10
  class InnerClass {
    def printX() = println(this.x)
  }
}

val oc = new OuterClass
val ic = new oc.InnerClass
ic.printX() // 输出10

在上面的示例中,InnerClass可以访问OuterClass的私有成员x。内部类的实例通过访问外部类实例的方式实现。

总结

this是Scala中的关键字,用于引用当前实例。它在构造器中用于显式调用同一类的其他构造器。this.type类型表示指向同一实例的类类型,可以用于将方法修饰为支持链式调用。在嵌套类中,this用于引用外部类实例。