@mirascript/help 0.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +79 -0
- package/dist/index.js +78 -0
- package/package.json +21 -0
- package/scripts/build.js +165 -0
- package/src/keyword/and.md +26 -0
- package/src/keyword/break.md +32 -0
- package/src/keyword/case.md +16 -0
- package/src/keyword/const.md +10 -0
- package/src/keyword/continue.md +14 -0
- package/src/keyword/effect.md +6 -0
- package/src/keyword/else.md +32 -0
- package/src/keyword/false.md +5 -0
- package/src/keyword/finally.md +6 -0
- package/src/keyword/fn.md +35 -0
- package/src/keyword/for.md +43 -0
- package/src/keyword/global.md +16 -0
- package/src/keyword/handle.md +6 -0
- package/src/keyword/if.md +40 -0
- package/src/keyword/in.md +44 -0
- package/src/keyword/inf.md +10 -0
- package/src/keyword/is.md +11 -0
- package/src/keyword/let.md +11 -0
- package/src/keyword/loop.md +13 -0
- package/src/keyword/match.md +18 -0
- package/src/keyword/mod.md +6 -0
- package/src/keyword/mut.md +25 -0
- package/src/keyword/nan.md +10 -0
- package/src/keyword/nil.md +11 -0
- package/src/keyword/not.md +26 -0
- package/src/keyword/op.md +6 -0
- package/src/keyword/or.md +26 -0
- package/src/keyword/perform.md +6 -0
- package/src/keyword/pub.md +6 -0
- package/src/keyword/resume.md +6 -0
- package/src/keyword/return.md +12 -0
- package/src/keyword/true.md +5 -0
- package/src/keyword/try.md +6 -0
- package/src/keyword/type.md +10 -0
- package/src/keyword/underscore.md +16 -0
- package/src/keyword/use.md +6 -0
- package/src/keyword/where.md +6 -0
- package/src/keyword/while.md +12 -0
- package/src/operator/arrow.md +6 -0
- package/src/operator/assign.md +23 -0
- package/src/operator/asterisk.md +9 -0
- package/src/operator/asterisk_assign.md +11 -0
- package/src/operator/brace.md +26 -0
- package/src/operator/bracket.md +32 -0
- package/src/operator/caret.md +10 -0
- package/src/operator/caret_assign.md +11 -0
- package/src/operator/colon.md +29 -0
- package/src/operator/colon_colon.md +10 -0
- package/src/operator/comma.md +13 -0
- package/src/operator/dot.md +15 -0
- package/src/operator/equal.md +43 -0
- package/src/operator/exclamation.md +23 -0
- package/src/operator/greater.md +10 -0
- package/src/operator/greater_equal.md +9 -0
- package/src/operator/half_open_range.md +12 -0
- package/src/operator/less.md +9 -0
- package/src/operator/less_equal.md +9 -0
- package/src/operator/logical_and.md +9 -0
- package/src/operator/logical_and_assign.md +11 -0
- package/src/operator/logical_or.md +9 -0
- package/src/operator/logical_or_assign.md +11 -0
- package/src/operator/minus.md +10 -0
- package/src/operator/minus_assign.md +11 -0
- package/src/operator/not_equal.md +10 -0
- package/src/operator/null_coalescing.md +10 -0
- package/src/operator/null_coalescing_assign.md +14 -0
- package/src/operator/paren.md +39 -0
- package/src/operator/percent.md +9 -0
- package/src/operator/percent_assign.md +11 -0
- package/src/operator/plus.md +10 -0
- package/src/operator/plus_assign.md +11 -0
- package/src/operator/question.md +9 -0
- package/src/operator/question_colon.md +12 -0
- package/src/operator/semicolon.md +13 -0
- package/src/operator/slash.md +9 -0
- package/src/operator/slash_assign.md +11 -0
- package/src/operator/spread_range.md +31 -0
- package/src/operator/tilde_equal.md +24 -0
- package/src/operator/tilde_not_equal.md +10 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: 'in'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`in` 用于“包含/存在”判断,以及 `for` 循环。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
对于 `array` 类型,`in` 用于判断某个元素是否在数组中存在:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
fn is_spring(month) {
|
|
13
|
+
month in [3, 4, 5]
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
对于 `record` / `module` / `extern` 类型,`in` 用于判断某个键是否在容器中存在:
|
|
20
|
+
|
|
21
|
+
```mira
|
|
22
|
+
let record = (a: 1, b: 2, c: 3);
|
|
23
|
+
let a_exists = 'a' in record; // true
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
也可与 `global` 关键字结合使用,判断全局变量是否存在:
|
|
29
|
+
|
|
30
|
+
```mira
|
|
31
|
+
if 'my_global' in global {
|
|
32
|
+
my_global += 1;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
同时,`for` 循环也使用 `in`:
|
|
39
|
+
|
|
40
|
+
```mira
|
|
41
|
+
for i in 1..3 {
|
|
42
|
+
// i: 1, 2, 3
|
|
43
|
+
}
|
|
44
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: 'match'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`match` 表达式对一个值进行分支匹配,由多个 `case` 组成。
|
|
6
|
+
|
|
7
|
+
```mira
|
|
8
|
+
fn classify {
|
|
9
|
+
match it {
|
|
10
|
+
case (0, 0) { "Origin" }
|
|
11
|
+
case (x, 0) if x > 0 { "Positive X-Axis (x=$x)" }
|
|
12
|
+
case (x, 0) if x < 0 { "Negative X-Axis (x=$x)" }
|
|
13
|
+
case (0, y) { "Y-Axis (y=$y)" }
|
|
14
|
+
case (x, y) { "Somewhere else (x=$x, y=$y)" }
|
|
15
|
+
case _ { "Not a point" }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: 'mut'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`mut` 用于声明可变变量。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
使用 `let` 语句时声明一个可变变量:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
let mut x = 1;
|
|
13
|
+
x += 2;
|
|
14
|
+
// x == 3
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
在模式匹配中声明一个可变绑定:
|
|
20
|
+
|
|
21
|
+
```mira
|
|
22
|
+
let (mut a, b) = (1, 2);
|
|
23
|
+
a += 10;
|
|
24
|
+
// b += 10; // 这行代码会报错,因为 b 是不可变的
|
|
25
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: 'not'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`not` 用于在模式匹配中取反一个模式,也可以作为 `!` 运算符的替代写法。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
逻辑非模式:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
fn is_not_weekend(day) {
|
|
13
|
+
day is not 6 and not 7
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
逻辑非运算符:
|
|
20
|
+
|
|
21
|
+
```mira
|
|
22
|
+
fn is_minor(age) {
|
|
23
|
+
// 等同于 !(age >= 18)
|
|
24
|
+
not (age >= 18)
|
|
25
|
+
}
|
|
26
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: 'or'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`or` 用于在模式匹配中组合多个模式,也可以作为 `||` 运算符的替代写法。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
逻辑或模式:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
fn is_weekend(day) {
|
|
13
|
+
day is 6 or 7
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
逻辑或运算符:
|
|
20
|
+
|
|
21
|
+
```mira
|
|
22
|
+
fn is_superuser(role) {
|
|
23
|
+
// 等同于 role == "admin" || role == "superuser"
|
|
24
|
+
role == "admin" or role == "superuser"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: ['{', '}']
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`{ }` 用于表达式块或 JSON 风格记录字面量。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
表达式块:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
let x = { 1 + 2 };
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
在 JSON 风格记录字面量中,键名必须使用引号括起来:
|
|
18
|
+
|
|
19
|
+
```mira
|
|
20
|
+
let obj = { "x": 1, "y": 2, "n": nil };
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
注意:
|
|
24
|
+
|
|
25
|
+
- JSON 风格记录字面量不能为空,要声明一个空记录,请用 `()`;
|
|
26
|
+
- 键和值仍为 MiraScript 表达式,因此需要使用 `nil` 来表示空值,而不是 `null`。
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: ['[', ']']
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`[ ]` 用于数组字面量、索引访问与切片。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
数组字面量:
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
let arr = [1, 2, 3];
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
索引访问:
|
|
18
|
+
|
|
19
|
+
```mira
|
|
20
|
+
let first = arr[0];
|
|
21
|
+
let last = arr[-1];
|
|
22
|
+
let value = record["key"];
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
数组切片:
|
|
28
|
+
|
|
29
|
+
```mira
|
|
30
|
+
let subarr1 = arr[0..1]; // 取前两个元素
|
|
31
|
+
let subarr2 = arr[..<-1]; // 取到倒数第一个元素(不含)
|
|
32
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: ':'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
`:` 用于记录字面量、条件表达式和插值格式。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
在记录字面量中,`:` 用于分隔字段名和字段值。
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
let r = (x: 1, y: 2);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
在条件表达式中,`:` 用于分隔条件的不同分支。
|
|
18
|
+
|
|
19
|
+
```mira
|
|
20
|
+
let status = score >= 60 ? "及格" : "不及格";
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
在插值格式中,`:` 用于指定格式化选项。在指定格式化选项时,必须使用圆括号 `$(expr:format)`。
|
|
26
|
+
|
|
27
|
+
```mira
|
|
28
|
+
debug_print("π 的值约为 $(PI:.2)"); // 输出: π 的值约为 3.14
|
|
29
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
token: '=='
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
使用 `==` 运算符可以比较两个值是否严格相等。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
对于原始值,如果它们的类型和值都相同,则认为它们相等。
|
|
10
|
+
|
|
11
|
+
```mira
|
|
12
|
+
5 == 5; // true
|
|
13
|
+
"hello" == "hello"; // true
|
|
14
|
+
true == true; // true
|
|
15
|
+
5 == "5"; // false
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
特别地,对于 `number` 类型的值 `nan`,它与任何值都不相等,包括它自己。
|
|
19
|
+
|
|
20
|
+
```mira
|
|
21
|
+
nan == nan; // false
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
对于 `array` 和 `record`,只有他们的元素和属性都相等时,才认为它们相等。
|
|
27
|
+
|
|
28
|
+
```mira
|
|
29
|
+
[1, 2, 3] == [1, 2, 3]; // true
|
|
30
|
+
(a: 1, b: 2) == (a: 1, b: 2); // true
|
|
31
|
+
[1, 2, 3] == [1, 2, 4]; // false
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
对于 `function` `module` 和 `extern`,只有它们引用的是同一个对象时,才认为它们相等。
|
|
37
|
+
|
|
38
|
+
```mira
|
|
39
|
+
let fn1 = fn() { return 1; };
|
|
40
|
+
let fn2 = fn() { return 1; };
|
|
41
|
+
fn1 == fn1; // true
|
|
42
|
+
fn1 == fn2; // false
|
|
43
|
+
```
|