使用val声明的主要构造函数参数允许更改值

Rah*_*agh 2 scala immutability default-value

如下所示,主构造函数中的代码参数是使用默认值定义的,val这意味着这些参数的值不应更改。但是仍然为什么在初始化构造函数时值会改变

//Why values of Aname and Cname is getting overwritten      
class GFG(val Aname: String = "Ank", val Cname: String = "Constructors") {
  def display() = {
    println("Author name: " + Aname)
    println("Chapter name: " + Cname)

  }
}
//object main
object Main {
  def main(args: Array[String]) = {
    var obj = new GFG("a", "b")
    obj.display()
  }
}
Run Code Online (Sandbox Code Playgroud)

Krz*_*sik 5

class GFG(val Aname: String = "Ank", val Cname: String = "Constructors")

您正在使用带有默认参数的构造函数创建一个类。仅当您未明确提供它们时,才使用这些值。这意味着您可以:

new GFG("a", "b") //both parameters provided, no default values are used -> GFG(a,b)

new GFG("a") //only first parameter provided, second default value is used -> GFG(a,Constructors)

new GFG() // no parameters provided explicitly, only default values are used -> GFG(Ank,Constructors)
Run Code Online (Sandbox Code Playgroud)

如您所见,您不能将默认值用于Aname而是将其显式用于Cname,但是如果您使用命名参数,则有可能:

new GFG(Cname = "b") // GFG(Ank, b)
Run Code Online (Sandbox Code Playgroud)

  • 由于它们是“ vals”,因此您无法重新分配它们。关键是,在这里`val Aname:String =“ Ank”`并没有真正分配** val **。您只是提供* default *值,以防在方法调用期间未显式传递它。 (3认同)