Scala 趣题 22 函数重写,位置参数,参数名


  class C {
    def sum(x: Int = 1, y: Int = 2): Int = x + y
  }
  class D extends C {
    override def sum(y: Int = 3, x: Int = 4): Int = super.sum(x, y)
  }
  val d: D = new D
  val c: C = d
  c.sum(x = 0)
  d.sum(x = 0)



Explanation


Scala uses the static type of a variable to bind parameter names, but the defaults are determined by the runtime type:


    The binding of parameter names is done by the compiler and the only information the compiler can use is the static type of the variable.

    For parameters with a default value the compiler creates methods which compute the default argument expressions (SLS §4.6). In the above example, both classes C and D contain the methods sum$default$1 and sum$default$2 for the two default parameters. When a parameter is missing, the compiler uses the result of these methods, and these methods are invoked at run-time. 


你可能感兴趣的:(scala,函数重写)