aboutsummaryrefslogtreecommitdiff
path: root/doc/docs/zh
diff options
context:
space:
mode:
Diffstat (limited to 'doc/docs/zh')
-rw-r--r--doc/docs/zh/doc/control-flow/conditionals.md58
-rw-r--r--doc/docs/zh/doc/control-flow/goto.md106
2 files changed, 164 insertions, 0 deletions
diff --git a/doc/docs/zh/doc/control-flow/conditionals.md b/doc/docs/zh/doc/control-flow/conditionals.md
index 3a4d5d1..f8d2851 100644
--- a/doc/docs/zh/doc/control-flow/conditionals.md
+++ b/doc/docs/zh/doc/control-flow/conditionals.md
@@ -143,3 +143,61 @@ if a in list
143``` 143```
144 144
145</YueDisplay> 145</YueDisplay>
146
147`in` 运算符也可以用于表,并支持 `not in` 变体来进行否定检查:
148
149```yuescript
150has = "foo" in {"bar", "foo"}
151
152if a in {1, 2, 3}
153 print "a 在表中"
154
155not_exist = item not in list
156
157check = -> value not in table
158```
159
160<YueDisplay>
161
162```yue
163has = "foo" in {"bar", "foo"}
164
165if a in {1, 2, 3}
166 print "a 在表中"
167
168not_exist = item not in list
169
170check = -> value not in table
171```
172
173</YueDisplay>
174
175单元素列表或表会检查与该元素的相等性:
176
177```yuescript
178-- [1,] 检查 value == 1
179c = a in [1,]
180
181-- {1} 也是检查 value == 1
182c = a in {1}
183
184-- 没有逗号,[1] 是索引访问(tb[1])
185with tb
186 c = a in [1]
187```
188
189<YueDisplay>
190
191```yue
192-- [1,] 检查 value == 1
193c = a in [1,]
194
195-- {1} 也是检查 value == 1
196c = a in {1}
197
198-- 没有逗号,[1] 是索引访问(tb[1])
199with tb
200 c = a in [1]
201```
202
203</YueDisplay>
diff --git a/doc/docs/zh/doc/control-flow/goto.md b/doc/docs/zh/doc/control-flow/goto.md
new file mode 100644
index 0000000..6d1cc89
--- /dev/null
+++ b/doc/docs/zh/doc/control-flow/goto.md
@@ -0,0 +1,106 @@
1# Goto
2
3YueScript 支持 goto 语句和标签语法来控制程序流程,该语法遵循与 Lua 的 goto 语句相同的规则。**注意:** goto 语句需要 Lua 5.2 或更高版本。当编译目标是 Lua 5.1 时,使用 goto 语法将导致编译错误。
4
5标签使用双冒号定义:
6
7```yuescript
8::开始::
9::结束::
10::我的标签::
11```
12
13<YueDisplay>
14
15```yue
16::开始::
17::结束::
18::我的标签::
19```
20
21</YueDisplay>
22
23goto 语句可以跳转到指定的标签:
24
25```yuescript
26a = 0
27::开始::
28a += 1
29goto 结束 if a == 5
30goto 开始
31::结束::
32print "a 现在是 5"
33```
34
35<YueDisplay>
36
37```yue
38a = 0
39::开始::
40a += 1
41goto 结束 if a == 5
42goto 开始
43::结束::
44print "a 现在是 5"
45```
46
47</YueDisplay>
48
49goto 语句对于跳出深层嵌套循环非常有用:
50
51```yuescript
52for z = 1, 10
53 for y = 1, 10 do for x = 1, 10
54 if x^2 + y^2 == z^2
55 print '找到勾股数:', x, y, z
56 goto 完成
57::完成::
58```
59
60<YueDisplay>
61
62```yue
63for z = 1, 10
64 for y = 1, 10 do for x = 1, 10
65 if x^2 + y^2 == z^2
66 print '找到勾股数:', x, y, z
67 goto 完成
68::完成::
69```
70
71</YueDisplay>
72
73你也可以使用标签跳转到特定的循环层级:
74
75```yuescript
76for z = 1, 10
77 for y = 1, 10
78 for x = 1, 10
79 if x^2 + y^2 == z^2
80 print '找到勾股数:', x, y, z
81 print '尝试下一个 z...'
82 goto 继续z
83 ::继续z::
84```
85
86<YueDisplay>
87
88```yue
89for z = 1, 10
90 for y = 1, 10
91 for x = 1, 10
92 if x^2 + y^2 == z^2
93 print '找到勾股数:', x, y, z
94 print '尝试下一个 z...'
95 goto 继续z
96 ::继续z::
97```
98
99</YueDisplay>
100
101## 注意事项
102
103- 标签在其作用域内必须唯一
104- goto 可以跳转到相同或外层作用域级别的标签
105- goto 不能跳转到内层作用域(如代码块或循环内部)
106- 谨慎使用 goto,因为它会使代码更难阅读和维护