Skip to content

Commit 04afbe4

Browse files
committed
docs: rewrites to add readability
1 parent d359027 commit 04afbe4

14 files changed

Lines changed: 156 additions & 130 deletions

File tree

docs/advanced/cmd.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 命令
22
## Cmd
33
`Cmd` 是 Julia 中表示指令的数据类型,使用一对 ``` `` ``` 定义,例如 `` `cd ../` ``
4+
45
用构造函数 `Cmd(cmd::Cmd; ignorestatus=false, detach=false, windows_verbatim=false, windows_hide=false, env, dir)` 定义状态,其中
56
* `ignorestatus``true` 时,命令返回值非 0 不会抛出异常
67
* `detach``true` 时,产生新进程运行

docs/advanced/exception.md

Lines changed: 12 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 异常分类
2-
**异常(Exception)**是进行[异常处理](../basic/error.md)的重要信息传递工具,所有内置的错误类型都是 `Exception` 的子类型
2+
**异常**类型 `Exception` 是进行[异常处理](../basic/error.md)的重要信息传递工具,所有内置的错误类型都是 `Exception` 的子类型
33

44
| 名称 | 描述 |
55
| :-: | :-: |
@@ -35,55 +35,14 @@
3535
| `UndefVarError` | 当前作用域中某量未定义 |
3636

3737
## 练习
38-
对于以下填空题,判断抛出的异常类型,不会抛出异常则填入 `nothing`
39-
```insert-test
40-
[global]
41-
name = "异常类型判断测试"
42-
time_limit = 300
43-
full_score = 100
44-
45-
[[parts]]
46-
type = "group"
47-
ch_type = "fill"
48-
score = 10
49-
50-
[[parts]]
51-
content = "`NaN/0`"
52-
ans = "nothing"
53-
54-
[[parts]]
55-
content = "`1÷0`"
56-
ans = "DivideError"
57-
58-
[[parts]]
59-
content = "`[1, 2, 3, 4][8]`"
60-
ans = "BoundsError"
61-
62-
[[parts]]
63-
content = "`\"cat\"/0`"
64-
ans = "MethodError"
65-
66-
[[parts]]
67-
content = "`foo() = foo(); foo()`"
68-
ans = "StackOverflowError"
69-
70-
[[parts]]
71-
content = "`[1 2; 3 4] - [1, 1, 1, 1]`"
72-
ans = "DimensionMismatch"
73-
74-
[[parts]]
75-
content = "`\"猫猫\"[2]`"
76-
ans = "StringIndexError"
77-
78-
[[parts]]
79-
content = "`Dict(0 => 1)[1]`"
80-
ans = "KeyError"
81-
82-
[[parts]]
83-
content = "`@assert 1==0`"
84-
ans = "AssertionError"
85-
86-
[[parts]]
87-
content = "`typeassert(0.0, Int)`"
88-
ans = "TypeError"
89-
```
38+
猜测一下代码会导致什么类型的错误结果(或者不会发生错误),并验证:
39+
* `NaN/0`
40+
* `1÷0`
41+
* `[1, 2, 3, 4][8]`
42+
* `\"cat\"/0`
43+
* `foo() = foo(); foo()`
44+
* `[1 2; 3 4] - [1, 1, 1, 1]`
45+
* `\"猫猫\"[2]`
46+
* `Dict(0 => 1)[1]`
47+
* `@assert 1==0`
48+
* `typeassert(0.0, Int)`

docs/advanced/string_code.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 字符串编码
22
Julia 中的 `String` 并不具有一个特定的编码类型,包括但不限于 `ASCII``Latin-1``UTF-8``UCS-2``UTF-16``UTF-32`,每个字符占据一定的连续空间,但仍以 `Char` 形式导出。
33

4-
Julia `String` 所采用的编码的基本假设是**自同步(self-synchronizing)**
4+
Julia 中的 `String` 要求采用的编码是**自同步**(self-synchronizing)的,也就是说:从任意位置开始读取字节流,都可快速识别字符边界,恢复正确的解码状态
55

66
以该字符串 `s` 为例(`UTF-8`):
77
| 直观编号 | `Char` | 所占字节数 |

docs/advanced/typesystem.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,9 +672,7 @@ julia> show(stdout, "text/html", Polar(3.0, 4.0))
672672
```
673673

674674
展示结果:
675-
```insert-html
676675
<code>Polar{Float64}</code> complex number: 3.0 <i>e</i><sup>4.0 <i>i</i></sup><br />
677-
```
678676

679677
根据经验,单行 `show` 方法应为创建的显示对象打印有效的 Julia 表达式。当这个 `show` 方法包含中缀运算符时,比如上面的 `Polar` 的单行 `show` 方法里的乘法运算符(`*`),在作为另一个对象的部分打印时,它可能无法被正确解析。要查看此问题,请考虑下面的表达式对象(请参阅[Expr](expr.md)),它代表 `Polar` 类型的特定实例的平方:
680678
```julia-repl

docs/basic/basicio.md

Lines changed: 62 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
# 基础I/O
22
## 字符串基础
3-
[关于字符串的详细信息](string.md)
4-
此处你暂时只需要知道的是,你可以在一对 `""` 中放若干文字,它们可以构成字符串:
3+
你将[在之后读到](string.md)关于字符串更详细的信息。
4+
5+
字符串可用于存储一串文字。
6+
7+
在一对 `""` 中放若干文字,它们可以构成字符串字面量:
58
```julia-repl
69
julia> "A quick brown fox jumps over the lazy dog."
710
"A quick brown fox jumps over the lazy dog."
@@ -10,53 +13,91 @@ julia> "喵( o=^•ェ•)o"
1013
"喵( o=^•ェ•)o"
1114
```
1215

13-
字符串与字符串中的内容通常不是同一个东西
16+
字符串与字符串中的内容通常是不相等的
1417
```julia-repl
15-
julia> "0"==0
18+
julia> "0" == 0
19+
false
20+
21+
julia> "sqrt(2)" == sqrt(2)
1622
false
1723
18-
julia> A quick brown fox jumps over the lazy dog.
19-
ERROR: syntax: extra token "quick" after end of expression
24+
julia> "a" == a
25+
ERROR: UndefVarError: `a` not defined in `Main`
2026
```
2127

2228
## print
23-
`print` 是基本的输出方式
29+
`print` 是最基本与常用的输出方式。在 REPL 中,输出结果会出现在代码后。
2430
```julia-repl
2531
julia> print(0)
2632
0
27-
julia> print(1, 2, 3) # 允许接受多个参数
33+
julia> print(1, 2, 3) # 允许接受多个参数,它们的输出间没有空隙
2834
123
29-
julia> print("world.me.say_hello()") # (这个字符串内容看上去像代码
35+
julia> print("world.me.say_hello()") # 输出字符串
3036
world.me.say_hello()
31-
julia>
37+
julia> print(1, " ", 2, " ", 3) # 手动填充空格
38+
1 2 3
3239
```
3340

3441
## println
35-
`println``print` 相似,不同的是在末尾会多进行一次换行。
36-
为了美观,许多人会在输出时选择它而不是 `print`。两者配合也可以完成更好的输出效果。
42+
`println` 除完成 `print` 的职责之外在末尾会多进行一次换行。
43+
44+
为了代码简洁和输出结果美观,有时会在输出时选择它而不是 `print`。两者配合也可以完成更好的输出效果。
3745
```julia-repl
46+
julia> print(0, "\n")
47+
0
48+
3849
julia> println(0)
3950
0
4051
41-
julia> println(1,2,3)
52+
julia> println(1, 2, 3)
4253
123
4354
44-
julia>
55+
julia> println("╭╮"); println("╰╯")
56+
╭╮
57+
╰╯
4558
```
4659

4760
## printstyled
48-
`printstyled` 可以在环境允许的情况下输出有风格的文字(当前功能包括彩色与粗体)
61+
`printstyled` 可以在环境允许的情况下输出有风格的文字。可配置的选项包括粗体、斜体、下划线、闪烁、前景背景反转、隐藏与色彩。
4962
```julia-repl
5063
julia> printstyled(1, 2, 3; color=:red)
51-
123 # 你看,这里不允许这个功能,使用它输出没有特殊效果(
64+
123 # 如果系统支持,在 REPL 中显示红色
5265
```
5366

54-
它基于的标准是广泛用于现代控制台的 `ansi-escape-code/sequence`(可追溯至 `VT100`,可参阅 [windows 的相关支持](https://docs.microsoft.com/zh-CN/windows/console/console-virtual-terminal-sequences)
67+
在控制台中,它基于的标准是广泛用于现代控制台的 `ansi-escape-code/sequence`,可参阅 [windows 的相关支持](https://docs.microsoft.com/zh-CN/windows/console/console-virtual-terminal-sequences)
5568

5669
## 输入
57-
为方便进行之后的练习,现提供以下代码
70+
既然有输出,就要有输入。Julia 中的 `readuntil``readline` 会读入字符串。
71+
72+
`readline` 会获取连续的字符,直到行尾。
73+
```julia-repl
74+
julia> a = readline();
75+
read read read!
76+
77+
julia> a
78+
"read read read!"
79+
```
80+
81+
`readuntil` 会获取连续的字符,直到读到空格。
82+
```julia-repl
83+
julia> a = readuntil(stdin, ' ');
84+
read buffered
85+
86+
julia> buffered
87+
ERROR: UndefVarError: `buffered` not defined in `Main`
88+
Suggestion: check for spelling errors or missing imports.
89+
90+
julia>
91+
92+
julia> a
93+
"read"
94+
```
95+
96+
上面的结果是在 REPL 中得到的。字符串 `buffered` 及回车没有被读取,因此仍在缓冲区中,自动变成了一行命令的输入。
97+
98+
两者也可以配合使用:
5899
```julia-repl
59-
julia> a=readuntil(stdin,' '); b=readline() # 前者读到空格为止,后者读到行尾
100+
julia> a = readuntil(stdin, ' '); b = readline()
60101
first second
61102
"second"
62103
@@ -67,9 +108,9 @@ julia> b
67108
"second"
68109
```
69110

70-
利用 `parse` 函数将字符串转为整数的功能,你可以读入整数
111+
利用 `parse` 函数将字符串转为整数的功能,可以实现读入整数的效果。
71112
```julia-repl
72-
julia> a=parse(Int,readuntil(stdin,' ')); b=parse(Int,readline());
113+
julia> a = parse(Int, readuntil(stdin, ' ')); b = parse(Int, readline());
73114
2333 4
74115
75116
julia> a, b

docs/basic/bool.md

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# 布尔
2-
## 布尔代数
3-
通常来说,布尔代数指布尔逻辑,可参照[此处的介绍](../knowledge/bool_logic.md)
2+
## 布尔逻辑
3+
[在此阅读](../knowledge/bool_logic.md)关于布尔逻辑的详细内容
44

5-
`Bool` 是 Julia 中的布尔类型名,其值只能为 `true``false` 之一。
5+
`Bool` 是 Julia 中的布尔类型名,其值只能为 `true``false` 之一。
66

77
## 运算
88
| 表达式 | 名称 |
@@ -18,9 +18,6 @@ false
1818
julia> true && "foo"
1919
"foo"
2020
21-
julia> false && "foo" # 短路意味着前一个表达式为否时,不会关心后一个表达式
22-
false
23-
2421
julia> false || "foo"
2522
"foo"
2623
@@ -32,23 +29,44 @@ true
3229

3330
特别地,`false` 可以用于如下功能:
3431
```julia-repl
35-
julia> NaN*0
32+
julia> NaN * 0
3633
NaN
3734
38-
julia> NaN*false
35+
julia> NaN * false
3936
0.0
4037
```
4138

39+
## 短路
40+
短路是一个重要的特性,它是说:如果一个布尔逻辑表达式的第一个参数已经确定了整个表达式的值,则第二个参数根本不会被计算。
41+
42+
```julia-repl
43+
julia> a = 0
44+
0
45+
46+
julia> false && begin a=1; a==2 end
47+
false
48+
49+
julia> a
50+
0
51+
52+
julia> true || begin a=1; a==2 end
53+
true
54+
55+
julia> a
56+
0
57+
```
58+
59+
上例中 `begin a=1; a==2 end` 没有被计算,因此没有进行 `a = 1` 的赋值操作。
60+
4261
## 缺失
43-
**缺失(Missing)**,具有唯一实例 `missing`它用于表示字面意思,即“值缺失”。[^1]
62+
**缺失**类型 `Missing` 具有唯一的实例 `missing`它表示其字面意思,即“值缺失”。[^1]这一语义在数据科学中常被用到。
4463

45-
“值缺失”这一语义在数据科学中常被用到。
4664
对于大部分数学函数,`missing` 会传递:
4765
```julia-repl
48-
julia> missing==missing
66+
julia> missing == missing
4967
missing
5068
51-
julia> missing+8
69+
julia> missing + 8
5270
missing
5371
```
5472

@@ -60,22 +78,22 @@ true
6078
julia> isequal(missing, missing)
6179
true
6280
63-
julia> missing===missing
81+
julia> missing === missing
6482
true
6583
```
6684

67-
特别地,对于 `isless``missing` 被认为比任何其它值大
85+
特别地,对于 `isless``missing` 被认为比任何其它值大
6886

6987
## 三值逻辑
70-
三值逻辑是由 `true``false``missing` 共同组成的,对于二元运算,有:
71-
- 对于所有的短路运算,仍保持短路规则
72-
- 若有参数为 `missing`,则返回 `missing`
88+
三值逻辑是由 `true``false``missing` 共同组成的。这里 `missing` 可以视作“未知是 true 还是 false”
89+
90+
对于二元运算,禁止将 `missing` 放在左侧,并满足短路规则。
7391

7492
```julia-repl
7593
julia> true || missing # 短路原则
7694
true
7795
78-
julia> false || missing # 缺失原则
96+
julia> false || missing
7997
missing
8098
```
8199

docs/basic/dict.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 字典
2-
`Dict` 可以创建一个**字典(dictionary)**,即一个********映射的结构,可以按照键名存放或取出数据。例如,你可以用它存储一个英文单词对应的翻译(这可能键的类型是字符串,值的类型是字符串数组)。
2+
使用 `Dict` 可以创建一个**字典**(dictionary),这是一个********映射的结构,可以按照键名存放或取出数据。例如,你可以用它存储一个英文单词对应的翻译(这可能键的类型是字符串,值的类型是字符串数组)。
33

44
## 初始化
55
```julia-repl

docs/basic/error.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ end
4444
也可以使用 `error(x)` 函数,相当于 `throw(ErrorException(x))`
4545

4646
## finally
47-
`try-catch` 结构中可以嵌入 `finally`,标注无论代码如何结束,都会运行 `finally` 中的代码块
47+
`try-catch` 结构中可以嵌入 `finally`,标注无论代码如何结束,都会运行 `finally` 中的代码块
4848
```jl
4949
io = open("1.txt", "w")
5050
try
@@ -53,3 +53,5 @@ finally
5353
close(io)
5454
end
5555
```
56+
57+
上例中保证运行 `close(io)` 避免了发生“你无法……因为有程序打开了……”的错误。

docs/basic/function.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ julia> baz(1; o=0)
9797
10
9898
```
9999

100-
## lambda表达式
101-
一种常用于创建局部匿名函数的方式是使用**Lambda 表达式**
102-
它的格式是 `(参数列表) -> 表达式`,为了方便,有时把表达式放入 `begin ... end`
100+
## lambda 表达式
101+
一种常用于创建局部匿名函数的方式是使用类似于[**Lambda 表达式**](https://rratic.github.io/posts/lambda-calculus/)的语法。
102+
103+
它的格式是 `(参数列表) -> 表达式`,为了方便,有时把表达式放入 `begin ... end` 中。
103104
```julia-repl
104105
julia> f = (x::Int) -> x+1
105106
#2 (generic function with 1 method)

0 commit comments

Comments
 (0)