Skip to content

Commit 2be8424

Browse files
committed
docs: format
1 parent 1937fd5 commit 2be8424

8 files changed

Lines changed: 98 additions & 74 deletions

File tree

docs/advanced/method.md

Lines changed: 29 additions & 26 deletions
Large diffs are not rendered by default.

docs/advanced/module.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 模块
22
## 简介
3-
Julia 中的模块(module)是一些互相隔离的可变工作空间,会引入新的全局作用域。模块允许创建顶层定义(也称为全局变量),而无需担心命名冲突。
4-
在模块中,利用导入(importing)控制其它模块中的哪些名称是可见的;利用导出(exporting)控制自己的模块中哪些名称是公开的。
3+
Julia 中的**模块**(module)是一些互相隔离的可变工作空间,会引入新的全局作用域。模块允许创建顶层定义(也称为全局变量),而无需担心命名冲突。
4+
在模块中,利用**导入**(importing)控制其它模块中的哪些名称是可见的;利用**导出**(exporting)控制自己的模块中哪些名称是公开的。
55

66
模块的[类型](typesystem.md)名是 `Module`
77

@@ -13,7 +13,7 @@ Julia 中的模块(module)是一些互相隔离的可变工作空间,会
1313
## 当前模块
1414
在使用时,你需要搞清楚当前模块的位置。模块中的所有代码,若无特别标注,都是作用于当前模块的。
1515
!!! tips
16-
可以利用 `@__MODULE__` 获取当前模块名
16+
可以利用 `@__MODULE__` 获取当前模块名
1717

1818
## 语法
1919
使用 `module ... end` 声明一个模块,它会默认导入 `Base``Core`(特别地,可以使用 `baremodule ... end` 从而不导入 `Base`,也不在本地定义 `eval``include`)。

docs/advanced/struct.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ julia> foo.baz
159159
```
160160

161161
### 默认构造函数
162-
但在没有任何特别的构造函数声明的情况下,有两种默认方式可以创建新的复合对象,一种是显式地给出类型参数,另一种是通过传给对象构造函数的参数隐式地推断出\
162+
但在没有任何特别的构造函数声明的情况下,有两种默认方式可以创建新的复合对象,一种是显式地给出类型参数,另一种是通过传给对象构造函数的参数隐式地推断出。
163+
163164
由于 `Point{Float64}` 类型等价于在 `Point` 声明时用 `Float64` 替换 `T` 得到的具体类型,它可以相应地作为构造函数使用
164165
```julia-repl
165166
julia> p = Point{Float64}(1.0, 2.0)

docs/advanced/typesystem.md

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,28 @@ end
8585
Julia < 1.8.0 不支持对全局变量进行类型标注
8686

8787
## 抽象类型
88-
抽象类型不能实例化,只能作为类型图中的节点使用,从而描述相关具体类型的集,即那些作为其后代的具体类型。即便抽象类型没有实例, 由于它们是类型系统的主干,故我们首先从抽象类型谈起:抽象类型形成了概念的层次结构,这使得 Julia 的类型系统不只是对象实现的集合\
89-
回想一下,在[整数](../basic/int.md)[浮点数](../basic/float.md)中,我们介绍了各种数值的具体类型:`Int8``UInt8``Int16``UInt16``Int32``UInt32``Int64``UInt64``Int128``UInt128``Float16``Float32``Float64`\
90-
尽管 `Int8``Int16``Int32``Int64``Int128` 具有不同的表示大小,但都具有共同的特征,即它们都是带符号的整数类型。类似地,`UInt8``UInt16``UInt32``UInt64``UInt128` 都是无符号整数类型,而 `Float16``Float32``Float64` 是不同的浮点数类型而非整数类型。\
91-
一段代码只对某些类型有意义是很常见的,比如,只在其参数是某种类型的整数,而不真正取决于特定*类型*的整数时有意义。例如,最大公约数适用于所有类型的整数,但不适用于浮点数。抽象类型允许构造类型的层次结构,这给具体类型提供了可以适应的环境。例如,你可以轻松地为任何类型的整数编程,而不用将算法限制为某种特殊类型的整数。\
92-
抽象类型可以由`abstract type`关键字来声明。声明抽象类型的一般语法是:
88+
抽象类型不能实例化,只能作为类型图中的节点使用,从而描述相关具体类型的集,即那些作为其后代的具体类型。即便抽象类型没有实例, 由于它们是类型系统的主干,故我们首先从抽象类型谈起:抽象类型形成了概念的层次结构,这使得 Julia 的类型系统不只是对象实现的集合。
89+
90+
回想一下,在[整数](../basic/int.md)[浮点数](../basic/float.md)中,我们介绍了各种数值的具体类型:`Int8``UInt8``Int16``UInt16``Int32``UInt32``Int64``UInt64``Int128``UInt128``Float16``Float32``Float64`
91+
92+
尽管 `Int8``Int16``Int32``Int64``Int128` 具有不同的表示大小,但都具有共同的特征,即它们都是带符号的整数类型。类似地,`UInt8``UInt16``UInt32``UInt64``UInt128` 都是无符号整数类型,而 `Float16``Float32``Float64` 是不同的浮点数类型而非整数类型。
93+
94+
一段代码只对某些类型有意义是很常见的,比如,只在其参数是某种类型的整数,而不真正取决于特定*类型*的整数时有意义。例如,最大公约数适用于所有类型的整数,但不适用于浮点数。抽象类型允许构造类型的层次结构,这给具体类型提供了可以适应的环境。例如,你可以轻松地为任何类型的整数编程,而不用将算法限制为某种特殊类型的整数。。
95+
96+
抽象类型可以由 `abstract type` 关键字来声明。声明抽象类型的一般语法是:
9397
```jl
9498
abstract type «名称» end
9599
abstract type «名称» <: «上级抽象类型» end
96100
```
97101

98-
`abstract type` 关键字引入了一个新的抽象类型,`«名称»` 为其名称。此名称后面可以跟`<:`和一个已存在的类型,表示新声明的抽象类型是此「上级」类型的子类型\
99-
如果没有给出超类型,则默认超类型为 `Any`——一个已经定义好的抽象类型,所有对象都是 `Any` 的实例并且所有类型都是 `Any` 的子类型。在类型理论中,`Any` 通常称为「top」,因为它位于类型图的顶点。Julia 还有一个预定义了的抽象「bottom」类型,在类型图的最低点,写成 `Union{}`。这与 `Any` 完全相反:任何对象都不是 `Union{}` 的实例,所有的类型都是 `Union{}` 的超类型\
100-
让我们考虑[一些构成 Julia 数值类型层次结构的抽象类型](../lists/typetree1.6.txt#L795-L820)\
101-
`Number` 类型为 `Any` 类型的直接子类型,并且 `Real` 为它的子类型。接下来,`Real` 有子类型`Integer``AbstractFloat`,将世界分为整数的表示和实数的表示。实数的表示当然包括浮点类型,但也包括其他类型,例如有理数。因此,`AbstractFloat` 是一个 `Real` 的子类型,仅包括实数的浮点表示。整数被进一步细分为`Signed``Unsigned`\
102+
`abstract type` 关键字引入了一个新的抽象类型,`«名称»` 为其名称。此名称后面可以跟`<:`和一个已存在的类型,表示新声明的抽象类型是此「上级」类型的子类型。
103+
104+
如果没有给出超类型,则默认超类型为 `Any`——一个已经定义好的抽象类型,所有对象都是 `Any` 的实例并且所有类型都是 `Any` 的子类型。在类型理论中,`Any` 通常称为「top」,因为它位于类型图的顶点。Julia 还有一个预定义了的抽象「bottom」类型,在类型图的最低点,写成 `Union{}`。这与 `Any` 完全相反:任何对象都不是 `Union{}` 的实例,所有的类型都是 `Union{}` 的超类型。
105+
106+
让我们考虑[一些构成 Julia 数值类型层次结构的抽象类型](../lists/typetree1.6.txt#L795-L820)
107+
108+
`Number` 类型为 `Any` 类型的直接子类型,并且 `Real` 为它的子类型。接下来,`Real` 有子类型 `Integer``AbstractFloat`,将世界分为整数的表示和实数的表示。实数的表示当然包括浮点类型,但也包括其他类型,例如有理数。因此,`AbstractFloat` 是一个 `Real` 的子类型,仅包括实数的浮点表示。整数被进一步细分为 `Signed``Unsigned`
109+
102110
`<:` 运算符的通常意义为「是······的子类型(is a subtype of)」,可以用在声明中,声明右侧类型是新声明类型的直接超类型;也可以在表达式中用作子类型运算符,在其左操作数为其右操作数的子类型时返回 `true`
103111
```julia-repl
104112
julia> Integer <: Number
@@ -110,17 +118,20 @@ false
110118

111119
抽象类型的一个重要用途是为具体类型提供默认实现。例如:
112120
```jl
113-
myplus(x,y)=x+y
121+
myplus(x, y) = x + y
114122
```
115123

116-
首先需要注意的是上述的参数声明等价于 `x::Any,y::Any`。当函数被调用时,例如 `myplus(2,5)`,派发器会选择与给定参数相匹配的名称为 `myplus` 的最具体方法。(有关多重派发的更多信息,请参阅[方法](method.md)。)\
124+
首先需要注意的是上述的参数声明等价于 `x::Any, y::Any`。当函数被调用时,例如 `myplus(2,5)`,派发器会选择与给定参数相匹配的名称为 `myplus` 的最具体方法(有关多重派发的更多信息,请参阅[方法](method.md))。
125+
117126
假设没有找到比上述方法更具体的方法,Julia 则会基于上面给出的泛型函数,在内部定义并编译一个名为 `myplus` 的方法,专门用于处理两个 `Int` 参数,即它隐式地定义并编译:
118127
```jl
119-
myplus(x::Int,y::Int)=x+y
128+
myplus(x::Int, y::Int) = x + y
120129
```
121130

122-
最后,调用这个具体的方法\
123-
因此,抽象类型允许程序员编写泛型函数,泛型函数可以通过许多具体类型的组合用作默认方法。多重派发使得程序员可以完全控制是使用默认方法还是更具体的方法。\
131+
最后,调用这个具体的方法。
132+
133+
因此,抽象类型允许程序员编写泛型函数,泛型函数可以通过许多具体类型的组合用作默认方法。多重派发使得程序员可以完全控制是使用默认方法还是更具体的方法。
134+
124135
需要注意的重点是,即使程序员依赖参数为抽象类型的函数,性能也不会有任何损失,因为它会针对每个调用它的参数元组的具体类型重新编译。(但在函数参数是抽象类型的容器的情况下,可能存在性能问题;请参阅[性能建议](https://docs.juliacn.com/latest/manual/performance-tips)
125136

126137
## 原始类型

docs/basic/error.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 异常处理
2-
在程序出现不应有的错误时,会**抛出(throw)**异常
2+
在程序出现错误/主动发现不应出现的情况时,会**抛出异常**
33

4-
数学错误是典型的异常
4+
数学错误是典型的异常(你之后会在[这里](../advanced/exception.md)看到常用错误类型信息)。
55
```julia-repl
66
julia> sqrt(-1)
77
ERROR: DomainError with -1.0:
@@ -42,7 +42,6 @@ end
4242
```
4343

4444
也可以使用 `error(x)` 函数,相当于 `throw(ErrorException(x))`
45-
常用错误类型信息[见此](../advanced/exception.md)
4645

4746
## finally
4847
`try-catch` 结构中可以嵌入 `finally`,标注无论代码如何结束,都会运行 `finally` 中的代码块

docs/basic/float.md

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,33 @@
2222

2323
根据 IEEE 754 的规定,存在 2 类特殊浮点数:
2424

25-
**Inf(Infinite/无穷)**:包括正无穷 `Inf` 和负无穷 `-Inf`。它在部分运算中有奇怪的表现
25+
无穷 **Inf**(infinity):包括正无穷 `Inf` 和负无穷 `-Inf`。它在部分运算中有奇怪的表现
2626
```julia-repl
27-
julia> 1/0
27+
julia> 1 / 0
2828
Inf
2929
30-
julia> Inf*2
30+
julia> Inf * 2
3131
Inf
3232
33-
julia> Inf*Inf
33+
julia> Inf * Inf
34+
Inf
35+
36+
julia> Inf * -Inf
37+
-Inf
38+
39+
julia> log(Inf)
3440
Inf
3541
```
3642

37-
**NaN(Not-any-Number)**:运算中若有NaN则结果往往也是NaN
43+
“不是数” **NaN**(not-any-number):运算中若有 `NaN` 则结果往往也是 `NaN`
3844
```julia-repl
3945
julia> Inf*0
4046
NaN
4147
42-
julia> Inf-Inf
48+
julia> Inf - Inf
49+
NaN
50+
51+
julia> sin(NaN)
4352
NaN
4453
```
4554

@@ -58,7 +67,7 @@ false
5867
## 高精度浮点数
5968
高精度浮点数的类型名为 `BigFloat`,也可以使用 `big(值)` 定义
6069
```julia-repl
61-
julia> v=BigFloat(3.14;precision=64)
70+
julia> v = BigFloat(3.14; precision=64)
6271
3.14000000000000012434
6372
6473
julia> sin(v)
@@ -76,7 +85,7 @@ julia> sin(v)
7685
julia> div(1.0, 9.0)
7786
0.0
7887
79-
julia> 1.0%9.0
88+
julia> 1.0 % 9.0
8089
1.0
8190
```
8291

@@ -125,18 +134,18 @@ Julia 支持三种数值转换,它们在处理不精确转换上有所不同
125134
### 除法函数
126135
| 函数 | 描述 |
127136
| --- | --- |
128-
| `div(x, y)`, `x÷y` | 截断除法;商向 0 近似 |
137+
| `div(x, y)`, `x ÷ y` | 截断除法;商向 0 近似 |
129138
| `fld(x, y)` | 向下取整除法;商向负无穷近似 |
130139
| `cld(x, y)` | 向上取整除法;商向正无穷近似 |
131-
| `rem(x, y)` | 取余;满足 `x = div(x,y)*y + rem(x,y)`;符号与 `x` 一致 |
132-
| `mod(x, y)` | 取模;满足 `x = fld(x,y)*y + mod(x,y)`;符号与 `y` 一致 |
140+
| `rem(x, y)` | 取余;满足 `x = div(x, y)*y + rem(x,y)`;符号与 `x` 一致 |
141+
| `mod(x, y)` | 取模;满足 `x = fld(x, y)*y + mod(x,y)`;符号与 `y` 一致 |
133142
| `mod1(x, y)` | 偏移 1 的 mod;若 `y` 大于 0,则返回 `r∈(0,y]`;若 `y` 小于 0,则 `r∈[y,0)` 且满足 `mod(r, y) = mod(x, y)` |
134143
| `mod2pi(x)` | 对 $2\pi$ 取模 |
135144
| `divrem(x, y)` | 返回 `(div(x, y), rem(x, y))` |
136145
| `fldmod(x, y)` | 返回 `(fld(x, y), mod(x, y))` |
137146

138147
```julia-repl
139-
julia> divrem(13,3)
148+
julia> divrem(13, 3)
140149
(4, 1)
141150
```
142151

@@ -158,7 +167,7 @@ julia> divrem(13,3)
158167
| `hypot(x, y)` | $\sqrt{x^2+y^2}$ |
159168
| `exp(x)` | 自然指数函数在 x 处的值 |
160169
| `expm1(x)` | 当 x 接近 0 时的 $\exp{x}-1$ 的精确值 |
161-
| `ldexp(x, n)` | `x*2^n` 的高效算法,n 为整数 |
170+
| `ldexp(x, n)` | $x \times 2^n$ 的高效算法,n 为整数 |
162171
| `log(x)` | x 的自然对数 |
163172
| `log(b, x)` | 以 b 为底 x 的对数 |
164173
| `log2(x)` | 以 2 为底 x 的对数 |
@@ -190,11 +199,11 @@ asind acosd atand acotd asecd acscd
190199
### 杂项
191200
| 函数 | 描述 |
192201
| --- | --- |
193-
| `sum(x,y...)` ||
194-
| `max(x,y...)` | 最大值 |
195-
| `min(x,y...)` | 最小值 |
196-
| `gcd(x,y...)` | 最大公约数,只接受整数 |
197-
| `lcm(x,y...)` | 最小公倍数,只接受整数 |
202+
| `sum(x, y...)` ||
203+
| `max(x, y...)` | 最大值 |
204+
| `min(x, y...)` | 最小值 |
205+
| `gcd(x, y...)` | 最大公约数,只接受整数 |
206+
| `lcm(x, y...)` | 最小公倍数,只接受整数 |
198207

199208
### 特殊函数
200209
[特殊数学函数 - SpecialFunctions](../packages/specialfunctions.md)

docs/basic/hello.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
## 注释
77
注释通常是一种解释性文本(即给人读的),它们不会被解释器运行。
8-
你可以打开 [REPL](setup_environment.md#简单测试),然后尝试以下操作:
8+
你可以打开 [REPL](setup_environment.md#运行%20REPL),然后尝试以下操作:
99
```julia-repl
1010
julia> # 以 '#' 开头的是单行注释
1111
@@ -18,6 +18,9 @@ julia> # 如果你发现除了新的一行以外什么都没显示,说明您
1818
1919
```
2020

21+
!!! tips
22+
如果你有一段代码暂时不用,但觉得以后可能用到/扔了可惜,可以把它用多行注释注释掉
23+
2124
## 输出
2225
为了让你得到系统性的概念,之后的几章理论内容偏多。因此,你有必要先了解点东西:
2326
```julia-repl
@@ -37,7 +40,7 @@ Hello, world!
3740
是的,Julia 的自带 REPL 中没有 Python IDLE 那样的高级文件功能。
3841
因此,如果想一次运行多行代码,你可以
3942
* 使用高级编辑器
40-
* [如何运行文件里的代码](setup_environment.md#命令行选项)
43+
* [运行文件里的代码](setup_environment.md#运行文件)
4144
* 这样
4245
```julia-repl
4346
julia> begin
@@ -48,9 +51,6 @@ Hello, world!
4851
2
4952
```
5053

51-
!!! tips
52-
如果你有一段代码暂时不用,但觉得以后可能用到/扔了可惜,可以把它用多行注释注释掉
53-
5454
## 练习
5555
- 已知某行代码以 `#` 开头,试找到在该行中写会被运行的代码的方法。
5656
- 使用代码输出「这句话」

docs/basic/variable_basic.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# 变量简介
2-
Julia 有丰富的**变量(variable)**类型,包括但不限于整数、浮点数、字符串、指针。它也是一种弱类型语言,允许同一变量前后的类型不同。
2+
Julia 有丰富的**变量**(variable)类型,包括但不限于整数、浮点数、字符串、指针。它也是一种弱类型语言,允许同一变量前后的类型不同。
33

44
等等,你是不是想问“变量”是什么?
55
简单来说,变量是使用一个名称(称为“变量名”)与一个值进行绑定。
66
这个变量名所代表的值是可变的,即在一段代码前后绑定的值可以不同。
77

88
可以在 REPL 中尝试以下示例:
99

10-
变量的**初始化(initialize)****赋值(assign)**
10+
变量的**初始化**(initialize)与**赋值**(assign)。
1111
```julia-repl
1212
julia> v = 1
1313
1
@@ -105,8 +105,9 @@ ERROR: cannot assign a value to variable Base.cos from module Main
105105
* 会对参数进行更改的函数使用`!`结尾
106106

107107
## 常量
108-
**常量(constant)**是程序中原则上值不能被改变的量。
109-
它可以被用于指示「圆周率」这种固定的值,或者「你程序的默认标题」这种运行时不会去改变的量。
108+
**常量**(constant)是程序中原则上值不能被改变的量。这可能包括
109+
* 「圆周率」这种固定的值
110+
* 「你程序的默认标题」这种运行时不会去改变、被多次使用的值
110111

111112
你可以在变量名前加 `const ` 来表示常量。
112113
```julia-repl

0 commit comments

Comments
 (0)