Skip to content

Commit a202690

Browse files
authored
Merge pull request #1212 from realwunan/packages-and-imports
Simplify Chinese translation of Scala Tour: packages-and-imports.md
2 parents 391c656 + a40bfe0 commit a202690

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

_zh-cn/tour/packages-and-imports.md

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: tour
3-
title: Packages and Imports
3+
title: 包和导入
44

55
discourse: true
66

@@ -12,3 +12,76 @@ language: zh-cn
1212

1313
previous-page: named-arguments
1414
---
15+
16+
# 包和导入
17+
Scala 使用包来创建命名空间,从而允许你创建模块化程序。
18+
19+
## 创建包
20+
通过在 Scala 文件的头部声明一个或多个包名称来创建包。
21+
22+
```
23+
package users
24+
25+
class User
26+
```
27+
一个惯例是将包命名为与包含 Scala 文件的目录名相同。 但是,Scala 并未对文件布局作任何限制。 在一个 sbt 工程中,`package users` 的目录结构可能如下所示:
28+
```
29+
- ExampleProject
30+
- build.sbt
31+
- project
32+
- src
33+
- main
34+
- scala
35+
- users
36+
User.scala
37+
UserProfile.scala
38+
UserPreferences.scala
39+
- test
40+
```
41+
注意 `users` 目录是包含在 `scala` 目录中的,该包中包含有多个 Scala 文件。 包中的每个 Scala 文件都可以具有相同的包声明。 声明包的另一种方式是使用大括号:
42+
```
43+
package users {
44+
package administrators {
45+
class NormalUser
46+
}
47+
package normalusers {
48+
class NormalUser
49+
}
50+
}
51+
```
52+
如你所见,这允许包嵌套并提供了对范围和封装的更好控制。
53+
54+
包名称应全部为小写,如果代码是在拥有独立网站的组织内开发的,则应采用以下的约定格式:`<top-level-domain>.<domain-name>.<project-name>`。 例如,如果 Google 有一个名为 `SelfDrivingCar` 的项目,则包名称将如下所示:
55+
```
56+
package com.google.selfdrivingcar.camera
57+
58+
class Lens
59+
```
60+
这可以对应于以下目录结构:`SelfDrivingCar/src/main/scala/com/google/selfdrivingcar/camera/Lens.scala`
61+
62+
## 导入
63+
`import` 语句用于导入其他包中的成员(类,特质,函数等)。 使用相同包的成员不需要 `import` 语句。 导入语句可以有选择性:
64+
```
65+
import users._ // 导入包 users 中的所有成员
66+
import users.User // 导入类 User
67+
import users.{User, UserPreferences} // 仅导入选择的成员
68+
import users.{UserPreferences => UPrefs} // 导入类并且设置别名
69+
```
70+
71+
Scala 不同于 Java 的一点是 Scala 可以在任何地方使用导入:
72+
73+
```tut
74+
def sqrtplus1(x: Int) = {
75+
import scala.math.sqrt
76+
sqrt(x) + 1.0
77+
}
78+
```
79+
如果存在命名冲突并且你需要从项目的根目录导入,请在包名称前加上 `_root_`
80+
```
81+
package accounts
82+
83+
import _root_.users._
84+
```
85+
86+
87+
注意:包 `scala``java.lang` 以及 `object Predef` 是默认导入的。

0 commit comments

Comments
 (0)