11 详解scala中函数默认参数和命名参数

详解scala中函数默认参数和命名参数

默认参数部分

  • 我们前端都是写道函数默认参数的一些问题,这里我们再拿出来说一下。
  • 基本上官方的分文档还是写的比较的详细。在看一些基础的时候可以学习下。
  • Scala具备给参数提供默认值的能力,这样调用者就可以忽略这些具有默认值的参数。
def log(message: String, level: String = "INFO") = println(s"$level: $message")

log("System starting")  // prints INFO: System starting
log("User not found", "WARNING")  // prints WARNING: User not found
  • 上面的参数level有默认值,所以是可选的。最后一行中传入的参数"WARNING"重写了默认值"INFO"
  • 在Java中,我们可以通过带有可选参数的重载方法达到同样的效果。不过,只要调用方忽略了一个参数,其他参数就必须要带名传入。
object ScalaTest {
  def main(args: Array[String]): Unit = {
    class Point(val x: Double = 0, val y: Double = 0)

    val point1 = new Point(y = 1)
    println(point1.x+" "+point1.y)
  }
}
  • 这里必须带名传入y = 1。
  • 注意从Java代码中调用时,Scala中的默认参数则是必填的(非可选),如
// Point.scala
class Point(val x: Double = 0, val y: Double = 0)
// Main.java
public class Main {
    public static void main(String[] args) {
        Point point = new Point(1);  // does not compile
    }
}

命名参数部分

  • 其实这部分还是比较间的,主要还是函数的参数传递规则。
  • 当调用方法时,实际参数可以通过其对应的形式参数的名称来标记
// 官方的例子
def printName(first: String, last: String): Unit = {
  println(first + " " + last)
}

printName("John", "Smith")  // Prints "John Smith"
printName(first = "John", last = "Smith")  // Prints "John Smith"
printName(last = "Smith", first = "John")  // Prints "John Smith"
  • 注意使用命名参数时,顺序是可以重新排列的。 但是,如果某些参数被命名了,而其他参数没有,则未命名的参数要按照其方法签名中的参数顺序放在前面。
// error: positional after named argument
printName(last = "Smith", "john") 
// 下面这个才是对的
printName("john",last = "Smith", ) 
  • 对比Java,注意调用 Java 方法时不能使用命名参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值