From b3df6c9057b3fb7d5ec7b27e06cad1efd8f14dd5 Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Wed, 24 Oct 2018 16:32:20 +0800 Subject: [PATCH 1/2] Add Chinese translation of default-parameter-values. --- _zh-cn/tour/default-parameter-values.md | 36 ++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/_zh-cn/tour/default-parameter-values.md b/_zh-cn/tour/default-parameter-values.md index e9102c8b93..36c920e133 100644 --- a/_zh-cn/tour/default-parameter-values.md +++ b/_zh-cn/tour/default-parameter-values.md @@ -1,6 +1,6 @@ --- layout: tour -title: Default Parameter Values +title: 默认参数值 discourse: false @@ -13,3 +13,37 @@ language: zh-cn next-page: named-arguments previous-page: annotations --- + +Scala具备给参数提供默认值的能力,这样调用者就可以忽略这些具有默认值的参数。 + +```tut +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中可以重载方法的地方,都可以通过带有可选参数的方法达到同样的效果。不过,调用方只要忽略了一个参数,其他参数必须要带名传入。 + +```tut +class Point(val x: Double = 0, val y: Double = 0) + +val point1 = new Point(y = 1) +``` +这里必须带名传入`y = 1`。 + +注意从Java代码中调用时,Scala中的默认参数就不是可选的了,如: + +```tut +// Point.scala +class Point(val x: Double = 0, val y: Double = 0) +``` + +```java +// Main.java +public class Main { + public static void main(String[] args) { + Point point = new Point(1); // does not compile + } +} +``` From 2c205b9227b41b4d735fb2f5e8e93a2192e505e1 Mon Sep 17 00:00:00 2001 From: Dongxu Wang Date: Fri, 30 Nov 2018 16:31:34 +0800 Subject: [PATCH 2/2] Polishing based on hepin1989. --- _zh-cn/tour/default-parameter-values.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_zh-cn/tour/default-parameter-values.md b/_zh-cn/tour/default-parameter-values.md index 36c920e133..eb19f34855 100644 --- a/_zh-cn/tour/default-parameter-values.md +++ b/_zh-cn/tour/default-parameter-values.md @@ -23,7 +23,7 @@ log("System starting") // prints INFO: System starting log("User not found", "WARNING") // prints WARNING: User not found ``` -上面的参数`level`有个默认值,所以是可选的。最后一行中传入的参数`"WARNING"`重写了默认的`"INFO"`。Java中可以重载方法的地方,都可以通过带有可选参数的方法达到同样的效果。不过,调用方只要忽略了一个参数,其他参数必须要带名传入。 +上面的参数level有默认值,所以是可选的。最后一行中传入的参数`"WARNING"`重写了默认值`"INFO"`。在Java中,我们可以通过带有可选参数的重载方法达到同样的效果。不过,只要调用方忽略了一个参数,其他参数就必须要带名传入。 ```tut class Point(val x: Double = 0, val y: Double = 0) @@ -32,7 +32,7 @@ val point1 = new Point(y = 1) ``` 这里必须带名传入`y = 1`。 -注意从Java代码中调用时,Scala中的默认参数就不是可选的了,如: +注意从Java代码中调用时,Scala中的默认参数则是必填的(非可选),如: ```tut // Point.scala