Skip to content

Commit 4a0cc66

Browse files
committed
add code tabs and correct minor translation mistakes.
1 parent 78314ae commit 4a0cc66

File tree

1 file changed

+93
-4
lines changed

1 file changed

+93
-4
lines changed

_zh-cn/overviews/scala3-book/taste-vars-data-types.md

Lines changed: 93 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ permalink: "/zh-cn/scala3/book/:title.html"
1313
---
1414

1515

16-
1716
本节介绍 Scala 变量和数据类型。
1817

1918
## 两种类型的变量
@@ -41,6 +40,9 @@ permalink: "/zh-cn/scala3/book/:title.html"
4140

4241
这些示例展示了如何创建 `val``var` 变量:
4342

43+
{% tabs var-express-1 %}
44+
{% tab 'Scala 2 and 3' %}
45+
4446
```scala
4547
// immutable
4648
val a = 0
@@ -49,33 +51,57 @@ val a = 0
4951
var b = 1
5052
```
5153

54+
{% endtab %}
55+
{% endtabs %}
56+
5257
在应用程序中,不能重新给一个 `val` 变量赋值。
5358
如果您尝试重新赋值一个 `val` 变量,将导致编译器错误:
5459

60+
{% tabs var-express-2 %}
61+
{% tab 'Scala 2 and 3' %}
62+
5563
```scala
5664
val msg = "Hello, world"
5765
msg = "Aloha" // "reassignment to val" error; this won’t compile
5866
```
5967

60-
相反,可以重新分配一个 `var` 变量:
68+
{% endtab %}
69+
{% endtabs %}
70+
71+
相反,可以给 `var` 变量重新赋值:
72+
73+
{% tabs var-express-3 %}
74+
{% tab 'Scala 2 and 3' %}
6175

6276
```scala
6377
var msg = "Hello, world"
6478
msg = "Aloha" // 因为可以重新分配 var,所以可以编译
6579
```
6680

81+
{% endtab %}
82+
{% endtabs %}
83+
6784
## 声明变量类型
6885

6986
创建变量时,您可以显式声明其类型,或让编译器推断类型:
7087

88+
{% tabs var-express-4 %}
89+
{% tab 'Scala 2 and 3' %}
90+
7191
```scala
7292
val x: Int = 1 // 显式
7393
val x = 1 // 隐式的;编译器推断类型
7494
```
7595

96+
{% endtab %}
97+
{% endtabs %}
98+
7699
第二种形式称为 _类型推断_,它是帮助保持此类代码简洁的好方法。
77100
Scala 编译器通常可以为您推断数据类型,如以下 REPL 示例的输出所示:
78101

102+
{% tabs var-express-5 %}
103+
{% tab 'Scala 2 and 3' %}
104+
79105
```scala
80106
scala> val x = 1
81107
val x: Int = 1
@@ -87,14 +113,23 @@ scala> val nums = List(1, 2, 3)
87113
val nums: List[Int] = List(1, 2, 3)
88114
```
89115

116+
{% endtab %}
117+
{% endtabs %}
118+
90119
如果您愿意,您始终可以显式声明变量的类型,但在像这样的简单赋值中,不须要这样:
91120

121+
{% tabs var-express-6 %}
122+
{% tab 'Scala 2 and 3' %}
123+
92124
```scala
93125
val x: Int = 1
94126
val s: String = "a string"
95127
val p: Person = Person("Richard")
96128
```
97129

130+
{% endtab %}
131+
{% endtabs %}
132+
98133
请注意,使用这种方法会感觉代码太啰嗦。
99134

100135
{% comment %}
@@ -108,6 +143,9 @@ Scala 带有你所期望的标准数值数据类型,它们都是类的成熟
108143

109144
这些示例展示了如何声明数值类型的变量:
110145

146+
{% tabs var-express-7 %}
147+
{% tab 'Scala 2 and 3' %}
148+
111149
```scala
112150
val b: Byte = 1
113151
val i: Int = 1
@@ -117,37 +155,64 @@ val d: Double = 2.0
117155
val f: Float = 3.0
118156
```
119157

158+
{% endtab %}
159+
{% endtabs %}
160+
120161
因为 `Int``Double` 是默认的数字类型,所以您通常创建它们而不显式声明数据类型:
121162

163+
{% tabs var-express-8 %}
164+
{% tab 'Scala 2 and 3' %}
165+
122166
```scala
123167
val i = 123 // 默认为 Int
124168
val j = 1.0 // 默认为 Double
125169
```
126170

171+
{% endtab %}
172+
{% endtabs %}
173+
127174
在您的代码中,您还可以将字符 `L``D``F`(或者它们对应的小写字母)加到数字后面以指定它们是 `Long``Double``Float` 值:
128175

176+
{% tabs var-express-9 %}
177+
{% tab 'Scala 2 and 3' %}
178+
129179
```scala
130180
val x = 1_000L // val x: Long = 1000
131181
val y = 2.2D // val y: Double = 2.2
132182
val z = 3.3F // val z: Float = 3.3
133183
```
134184

185+
{% endtab %}
186+
{% endtabs %}
187+
135188
当您需要非常大的数字时,请使用 `BigInt``BigDecimal` 类型:
136189

190+
{% tabs var-express-10 %}
191+
{% tab 'Scala 2 and 3' %}
192+
137193
```scala
138194
var a = BigInt(1_234_567_890_987_654_321L)
139195
var b = BigDecimal(123_456.789)
140196
```
141197

198+
{% endtab %}
199+
{% endtabs %}
200+
142201
其中 `Double``Float` 是近似十进制数,`BigDecimal` 用于精确算术。
143202

144203
Scala 还有 `String``Char` 数据类型:
145204

205+
{% tabs var-express-11 %}
206+
{% tab 'Scala 2 and 3' %}
207+
146208
```scala
147209
val name = "Bill" // String
148210
val c = 'a' // Char
149211
```
150212

213+
{% endtab %}
214+
{% endtabs %}
215+
151216
### 字符串
152217

153218
Scala 字符串类似于 Java 字符串,但它们有两个很棒的附加特性:
@@ -160,29 +225,47 @@ Scala 字符串类似于 Java 字符串,但它们有两个很棒的附加特
160225
字符串插值提供了一种非常易读的方式在字符串中使用变量。
161226
例如,给定这三个变量:
162227

228+
{% tabs var-express-12 %}
229+
{% tab 'Scala 2 and 3' %}
230+
163231
```scala
164232
val firstName = "John"
165233
val mi = 'C'
166234
val lastName = "Doe"
167235
```
168236

237+
{% endtab %}
238+
{% endtabs %}
239+
169240
您可以将这些变量组合在一个字符串中,如下所示:
170241

242+
{% tabs var-express-13 %}
243+
{% tab 'Scala 2 and 3' %}
244+
171245
```scala
172246
println(s"Name: $firstName $mi $lastName") // "Name: John C Doe"
173247
```
174248

249+
{% endtab %}
250+
{% endtabs %}
251+
175252
只需在字符串前面加上字母 `s`,然后在字符串中的变量名之前放置一个 `$` 符号。
176253

177254
要将任意表达式嵌入字符串中,请将它们括在花括号中:
178255

256+
{% tabs var-express-14 %}
257+
{% tab 'Scala 2 and 3' %}
258+
179259
``` scala
180260
println(s"2 + 2 = ${2 + 2}") // 打印 "2 + 2 = 4"
181261

182262
val x = -1
183263
println(s"x.abs = ${x.abs}") // 打印 "x.abs = 1"
184264
```
185265

266+
{% endtab %}
267+
{% endtabs %}
268+
186269
放在字符串前面的 `s` 只是一种可能的插值器。
187270
如果使用 `f` 而不是 `s`,则可以在字符串中使用 `printf` 样式的格式化语法。
188271
此外,字符串插值器只是一种特殊方法,可以定义自己的方法。
@@ -192,12 +275,18 @@ println(s"x.abs = ${x.abs}") // 打印 "x.abs = 1"
192275

193276
多行字符串是通过将字符串包含在三个双引号内来创建的:
194277

278+
{% tabs var-express-15 %}
279+
{% tab 'Scala 2 and 3' %}
280+
195281
```scala
196282
val quote = """The essence of Scala:
197283
Fusion of functional and object-oriented
198284
programming in a typed setting."""
199285
```
200286

201-
> 有关字符串插值器和多行字符串的更多详细信息,请参阅[“First Look at Types”章节][first-look]
287+
{% endtab %}
288+
{% endtabs %}
289+
290+
> 有关字符串插值器和多行字符串的更多详细信息,请参阅[“类型初探”章节][first-look]
202291
203-
[first-look]: {% link _zh-cn/overviews/scala3-book/first-look-at-types.md %}
292+
[first-look]: {% link _zh-cn/overviews/scala3-book/first-look-at-types.md %}

0 commit comments

Comments
 (0)