Skip to content

Commit 5fc921b

Browse files
benluojulienrf
authored andcommitted
add code tab in _zh-cn/overviews/scala3-book/fun-function-variables.md
1 parent 3ee9257 commit 5fc921b

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

_zh-cn/overviews/scala3-book/fun-function-variables.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,76 +16,118 @@ permalink: "/zh-cn/scala3/book/:title.html"
1616

1717
从上一节回到这个例子:
1818

19+
{% tabs fun-function-variables-1 %}
20+
{% tab 'Scala 2 and 3' %}
1921
```scala
2022
val doubledInts = ints.map((i: Int) => i * 2)
2123
```
24+
{% endtab %}
25+
{% endtabs %}
2226

2327
我们注意到这部分表达式是一个匿名函数:
2428

29+
{% tabs fun-function-variables-2 %}
30+
{% tab 'Scala 2 and 3' %}
2531
```scala
2632
(i: Int) => i * 2
2733
```
34+
{% endtab %}
35+
{% endtabs %}
2836

2937
它被称为 *匿名* 的原因是它没有分配给变量,因此没有名称。
3038

3139
但是,可以将匿名函数(也称为*函数字面量*)分配给变量以创建*函数变量*
3240

41+
{% tabs fun-function-variables-3 %}
42+
{% tab 'Scala 2 and 3' %}
3343
```scala
3444
val double = (i: Int) => i * 2
3545
```
46+
{% endtab %}
47+
{% endtabs %}
3648

3749
这将创建一个名为 `double` 的函数变量。
3850
在这个表达式中,原始函数字面量在 `=` 符号的右侧:
3951

52+
{% tabs fun-function-variables-4 %}
53+
{% tab 'Scala 2 and 3' %}
4054
```scala
4155
val double = (i: Int) => i * 2
4256
-----------------
4357
```
58+
{% endtab %}
59+
{% endtabs %}
4460

4561
新变量名在左侧:
4662

63+
{% tabs fun-function-variables-5 %}
64+
{% tab 'Scala 2 and 3' %}
4765
```scala
4866
val double = (i: Int) => i * 2
4967
------
5068
```
69+
{% endtab %}
70+
{% endtabs %}
5171

5272
并且函数的参数列表在此处加下划线:
5373

74+
{% tabs fun-function-variables-6 %}
75+
{% tab 'Scala 2 and 3' %}
5476
```scala
5577
val double = (i: Int) => i * 2
5678
--------
5779
```
80+
{% endtab %}
81+
{% endtabs %}
5882

5983
就像方法的参数列表一样,这意味着 `double` 函数有一个参数,一个名为 `i``Int`
6084
你可以在 REPL 中看到 `double` 的类型为 `Int => Int`,这意味着它接受一个 `Int` 参数并返回一个 `Int`
6185

86+
{% tabs fun-function-variables-7 %}
87+
{% tab 'Scala 2 and 3' %}
6288
```scala
6389
scala> val double = (i: Int) => i * 2
6490
val double: Int => Int = ...
6591
```
92+
{% endtab %}
93+
{% endtabs %}
6694

6795
### 调用函数
6896

6997
现在你可以像这样调用`double`函数:
7098

99+
{% tabs fun-function-variables-8 %}
100+
{% tab 'Scala 2 and 3' %}
71101
```scala
72102
val x = double(2) // 4
73103
```
104+
{% endtab %}
105+
{% endtabs %}
74106

75107
您还可以将 `double` 传递给 `map` 调用:
76108

109+
{% tabs fun-function-variables-9 %}
110+
{% tab 'Scala 2 and 3' %}
77111
```scala
78112
List(1, 2, 3).map(double) // List(2, 4, 6)
79113
```
114+
{% endtab %}
115+
{% endtabs %}
80116

81117
此外,当您有 `Int => Int` 类型的其他函数时:
82118

119+
{% tabs fun-function-variables-10 %}
120+
{% tab 'Scala 2 and 3' %}
83121
```scala
84122
val triple = (i: Int) => i * 3
85123
```
124+
{% endtab %}
125+
{% endtabs %}
86126

87127
您可以将它们存储在 `List``Map` 中:
88128

129+
{% tabs fun-function-variables-11 %}
130+
{% tab 'Scala 2 and 3' %}
89131
```scala
90132
val functionList = List(double, triple)
91133

@@ -94,9 +136,13 @@ val functionMap = Map(
94136
"3x" -> triple
95137
)
96138
```
139+
{% endtab %}
140+
{% endtabs %}
97141

98142
如果将这些表达式粘贴到 REPL 中,您会看到它们具有以下类型:
99143

144+
{% tabs fun-function-variables-12 %}
145+
{% tab 'Scala 2 and 3' %}
100146
````
101147
// a List that contains functions of the type `Int => Int`
102148
functionList: List[Int => Int]
@@ -105,6 +151,8 @@ functionList: List[Int => Int]
105151
// values have the type `Int => Int`
106152
functionMap: Map[String, Int => Int]
107153
````
154+
{% endtab %}
155+
{% endtabs %}
108156

109157
## 关键点
110158

0 commit comments

Comments
 (0)