Skip to content

Commit 3ee9257

Browse files
benluojulienrf
authored andcommitted
add code tab in _zh-cn/overviews/scala3-book/fun-eta-expansion.md
1 parent 60c2d30 commit 3ee9257

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

_zh-cn/overviews/scala3-book/fun-eta-expansion.md

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,26 @@ permalink: "/zh-cn/scala3/book/:title.html"
1616

1717
当你查看 Scala 集合类的 `map` 方法的 Scaladoc 时,你会看到它被定义为接受一个_函数_
1818

19+
{% tabs fun_1 %}
20+
{% tab 'Scala 2 and 3' for=fun_1 %}
1921
```scala
2022
def map[B](f: (A) => B): List[B]
2123
------------
2224
```
25+
{% endtab %}
26+
{% endtabs %}
2327

2428
事实上,Scaladoc 明确指出,“`f` 是应用于每个元素的_函数_。”
2529
但尽管如此,你可以通过某种方式将_方法_传递给 `map`,它仍然有效:
2630

31+
{% tabs fun_2 %}
32+
{% tab 'Scala 2 and 3' for=fun_2 %}
2733
```scala
2834
def times10(i: Int) = i * 10 // a method
2935
List(1, 2, 3).map(times10) // List(10,20,30)
3036
```
37+
{% endtab %}
38+
{% endtabs %}
3139

3240
你有没有想过这是如何工作的——如何将_方法_传递给需要_函数_的`map`
3341

@@ -48,19 +56,28 @@ I’ve made a few changes to that description that I hope are more accurate and
4856
它们的语法也不同。
4957
此示例说明如何定义执行相同任务的方法和函数,确定给定整数是否为偶数:
5058

59+
{% tabs fun_3 %}
60+
{% tab 'Scala 2 and 3' for=fun_3 %}
5161
```scala
5262
def isEvenMethod(i: Int) = i % 2 == 0 // a method
5363
val isEvenFunction = (i: Int) => i % 2 == 0 // a function
5464
```
65+
{% endtab %}
66+
{% endtabs %}
5567

5668
该函数确实是一个对象,因此您可以像使用任何其他变量一样使用它,例如将其放入列表中:
5769

70+
{% tabs fun_4 %}
71+
{% tab 'Scala 2 and 3' for=fun_4 %}
5872
```scala
5973
val functions = List(isEvenFunction)
6074
```
75+
{% endtab %}
76+
{% endtabs %}
6177

62-
相反,从技术上讲,方法不是对象,因此在 Scala 2 中,您不能将方法放入 `List` 中,至少不能直接放入,如下例所示:
6378

79+
{% tabs fun_5 class=tabs-scala-version %}
80+
{% tab 'Scala 2' for=fun_5 %}
6481
```scala
6582
// this example shows the Scala 2 error message
6683
val methods = List(isEvenMethod)
@@ -70,13 +87,21 @@ Unapplied methods are only converted to functions when a function type is expect
7087
You can make this conversion explicit by writing `isEvenMethod _` or `isEvenMethod(_)` instead of `isEvenMethod`.
7188
```
7289

73-
如该错误消息所示,在 Scala 2 中可以手动将方法转换为函数,但 Scala 3 的重要部分是改进了 Eta 扩展技术,所以现在当您尝试将方法当作变量用,它是可以工作的---您不必自己处理手动转换:
90+
相反,从技术上讲,方法不是对象,因此在 Scala 2 中,您不能将方法放入 `List` 中,至少不能直接放入,如下例所示:
91+
92+
{% endtab %}
93+
{% tab 'Scala 3' for=fun_5 %}
7494

7595
```scala
7696
val functions = List(isEvenFunction) // works
7797
val methods = List(isEvenMethod) // works
7898
```
7999

100+
Scala 3 的重要部分是改进了 Eta 扩展技术,所以现在当您尝试将方法当作变量用,它是可以工作的---您不必自己处理手动转换:
101+
102+
{% endtab %}
103+
{% endtabs %}
104+
80105
就这本入门书而言,需要了解的重要事项是:
81106

82107
- Eta Expansion 是 Scala 技术,让您可以像使用函数一样使用方法

0 commit comments

Comments
 (0)