@mirascript/help 0.1.45 → 0.1.46
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.js +5 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ export const KEYWORDS = Object.freeze({
|
|
|
13
13
|
"for": "`for` 用于遍历可迭代对象。\n\n---\n\n遍历一个范围:\n\n```mira\nlet mut sum = 0;\nfor i in 1..3 { // 或者 1..<4\n sum += i;\n}\n// sum == 6\n```\n\n---\n\n遍历一个数组:\n\n```mira\nlet arr = [10, 20, 30];\nlet mut sum = 0;\nfor value in arr {\n sum += value;\n}\n// sum == 60\n```\n\n---\n\n遍历一个记录:\n\n```mira\nlet record = (a: 1, b: 2, c: 3);\nlet mut sum = 0;\nfor key in record {\n sum += record[key];\n}\n// sum == 6\n```\n",
|
|
14
14
|
"global": "`global` 关键字用于读取全局变量或判断某个全局变量是否存在。\n\n---\n\n当变量名与局部变量冲突时,可以使用 `global` 关键字来访问全局变量。\n\n```mira\nlet some_name = 'shadow';\nsome_name; // 访问局部变量 'some_name'\nglobal.some_name; // 访问全局变量 'some_name'\n```\n\n---\n\n动态判断和访问全局变量:\n\n```mira\nfn get_global(name, fallback) {\n if name in global {\n global[name]\n } else {\n fallback\n }\n}\n```\n",
|
|
15
15
|
"if": "`if` 用于 `if` 表达式或 `match` 表达式的守卫条件。\n\n---\n\n`if` 表达式根据条件选择分支。条件必须是 `boolean`。\n\n```mira\nlet x = if 1 > 0 { \"pos\" } else { \"neg\" };\n```\n\n---\n\n使用 `else if` 添加多个条件分支:\n\n```mira\nlet x = if 1 > 2 {\n \"greater\"\n} else if 1 == 2 {\n \"equal\"\n} else {\n \"less\"\n};\n```\n\n---\n\n在 `match` 表达式中使用 `if` 作为守卫条件:\n\n```mira\nlet num = 10;\nlet result = match num {\n case n if n % 2 == 0 { \"even\" }\n case n { \"odd\" }\n};\n// result 的值是 \"even\"\n```\n",
|
|
16
|
-
"in": "`in` 用于“包含/存在”判断,以及 `for` 循环。\n\n---\n\n对于 `array` 类型,`in` 用于判断某个元素是否在数组中存在:\n\n```mira\nfn is_spring(month) {\n month in [3, 4, 5]\n}\n```\n\n---\n\n对于 `record` / `module` / `extern` 类型,`in` 用于判断某个键是否在容器中存在:\n\n```mira\nlet record = (a: 1, b: 2, c: 3);\nlet a_exists = 'a' in record; // true\n```\n\n---\n\n也可与 `global` 关键字结合使用,判断全局变量是否存在:\n\n```mira\nif 'my_global' in global {\n my_global
|
|
16
|
+
"in": "`in` 用于“包含/存在”判断,以及 `for` 循环。\n\n---\n\n对于 `array` 类型,`in` 用于判断某个元素是否在数组中存在:\n\n```mira\nfn is_spring(month) {\n month in [3, 4, 5]\n}\n```\n\n---\n\n对于 `record` / `module` / `extern` 类型,`in` 用于判断某个键是否在容器中存在:\n\n```mira\nlet record = (a: 1, b: 2, c: 3);\nlet a_exists = 'a' in record; // true\n```\n\n---\n\n也可与 `global` 关键字结合使用,判断全局变量是否存在:\n\n```mira\nif 'my_global' in global {\n debug_print('my_global exists');\n}\n```\n\n---\n\n同时,`for` 循环也使用 `in`:\n\n```mira\nfor i in 1..3 {\n // i: 1, 2, 3\n}\n```\n",
|
|
17
17
|
"inf": "`inf` 是正无穷大的 `number` 常量。\n\n```mira\ninf > 1e100; // true\n-inf < 0; // true\n```\n",
|
|
18
18
|
"is": "`is` 用于模式匹配:`value is pattern`,结果为 `boolean`。\n\n```mira\n1 is 1; // true\n1 is > 0; // true\n(a: 1) is (a: x); // true(并绑定 x)\n```\n",
|
|
19
19
|
"let": "`let` 用于声明局部变量。\n\n```mira\nlet x = 1;\nlet y = x + 2;\nlet mut z = y * 3;\n```\n",
|
|
@@ -48,7 +48,7 @@ export const OPERATORS = Object.freeze({
|
|
|
48
48
|
",": "`,` 用于分隔参数、数组元素、记录字段等。\n\n```mira\nlet arr = [1, 2, 3];\nlet r = (a: 1, b: 2);\n\nfn f(a, b, c) { a + b + c }\nf(1, 2, 3);\n```\n",
|
|
49
49
|
".": "`.` 用于成员访问。\n\n```mira\nlet r = (a: 1);\nr.a; // 1\nr.b; // nil\n\nlet arr = [10, 20];\narr.0; // 10\narr.2; // nil\n```\n",
|
|
50
50
|
"==": "使用 `==` 运算符可以比较两个值是否严格相等。\n\n---\n\n对于原始值,如果它们的类型和值都相同,则认为它们相等。\n\n```mira\n5 == 5; // true\n\"hello\" == \"hello\"; // true\ntrue == true; // true\n5 == \"5\"; // false\n```\n\n特别地,对于 `number` 类型的值 `nan`,它与任何值都不相等,包括它自己。\n\n```mira\nnan == nan; // false\n```\n\n---\n\n对于 `array` 和 `record`,只有他们的元素和属性都相等时,才认为它们相等。\n\n```mira\n[1, 2, 3] == [1, 2, 3]; // true\n(a: 1, b: 2) == (a: 1, b: 2); // true\n[1, 2, 3] == [1, 2, 4]; // false\n```\n\n---\n\n对于 `function` `module` 和 `extern`,只有它们引用的是同一个对象时,才认为它们相等。\n\n```mira\nlet fn1 = fn() { return 1; };\nlet fn2 = fn() { return 1; };\nfn1 == fn1; // true\nfn1 == fn2; // false\n```\n",
|
|
51
|
-
"!": "`!` 既可以作为前缀逻辑非,也可以作为后缀非空断言。\n\n---\n\n逻辑非:\n\n```mira\n!x // x 必须是 boolean\n```\n\n---\n\n非空断言:\n\n```mira\
|
|
51
|
+
"!": "`!` 既可以作为前缀逻辑非,也可以作为后缀非空断言。\n\n---\n\n逻辑非:\n\n```mira\n!x; // x 必须是 boolean\n```\n\n---\n\n非空断言:\n\n```mira\nlet x = nil;\nx!; // panic\n```\n",
|
|
52
52
|
">": "`>` 用于“大于”比较。\n\n```mira\n2 > 1; // true\n\"b\" > \"a\"; // true\n```\n",
|
|
53
53
|
">=": "`>=` 用于“大于等于”比较。\n\n```mira\n2 >= 2; // true\n```\n",
|
|
54
54
|
"..<": "`..<` 表示右开区间范围,包含起点,不包含终点。\n\n```mira\n[1..<3]; // [1, 2]\n\nlet arr = [10, 20, 30, 40];\narr[1..<3]; // [20, 30]\n```\n",
|
|
@@ -63,15 +63,15 @@ export const OPERATORS = Object.freeze({
|
|
|
63
63
|
"!=": "`!=` 判断两个值是否不相等,等价于 `!(x == y)`。\n\n```mira\n1 != 2; // true\n1 != 1; // false\n```\n",
|
|
64
64
|
"??": "`??` 是空合并,当左侧为 `nil` 时返回右侧,否则返回左侧。\n\n```mira\nnil ?? 1; // 1\n0 ?? 1; // 0\n```\n",
|
|
65
65
|
"??=": "`??=` 是空合并复合赋值,仅当左侧为 `nil` 时才会赋值右侧。\n\n```mira\nlet mut n = nil;\nn ??= 5;\n// n == 5\n\nn ??= 10;\n// n 仍然是 5\n```\n",
|
|
66
|
-
"(": "`( )` 用于分组表达式、函数调用参数列表,以及记录字面量。\n\n---\n\n分组表达式,控制计算顺序:\n\n```mira\nlet result = (1 + 2) * 3; // 先计算 1 + 2,然后乘以 3\n```\n\n---\n\n函数声明和调用:\n\n```mira\nfn add(a, b) { a + b }\nlet sum = add(1, 2);\n```\n\n---\n\n记录字面量:\n\n```mira\nlet record = (a: 1, b: 2);\nlet empty = (); // 空记录\n```\n\n---\n\n对于省略键名的单元素记录,必须添加逗号以区别于分组表达式。\n\n```mira\nlet single = (1,)
|
|
67
|
-
")": "`( )` 用于分组表达式、函数调用参数列表,以及记录字面量。\n\n---\n\n分组表达式,控制计算顺序:\n\n```mira\nlet result = (1 + 2) * 3; // 先计算 1 + 2,然后乘以 3\n```\n\n---\n\n函数声明和调用:\n\n```mira\nfn add(a, b) { a + b }\nlet sum = add(1, 2);\n```\n\n---\n\n记录字面量:\n\n```mira\nlet record = (a: 1, b: 2);\nlet empty = (); // 空记录\n```\n\n---\n\n对于省略键名的单元素记录,必须添加逗号以区别于分组表达式。\n\n```mira\nlet single = (1,)
|
|
66
|
+
"(": "`( )` 用于分组表达式、函数调用参数列表,以及记录字面量。\n\n---\n\n分组表达式,控制计算顺序:\n\n```mira\nlet result = (1 + 2) * 3; // 先计算 1 + 2,然后乘以 3\n```\n\n---\n\n函数声明和调用:\n\n```mira\nfn add(a, b) { a + b }\nlet sum = add(1, 2);\n```\n\n---\n\n记录字面量:\n\n```mira\nlet record = (a: 1, b: 2);\nlet empty = (); // 空记录\n```\n\n---\n\n对于省略键名的单元素记录,必须添加逗号以区别于分组表达式。\n\n```mira\nlet single = (1,);\n```\n",
|
|
67
|
+
")": "`( )` 用于分组表达式、函数调用参数列表,以及记录字面量。\n\n---\n\n分组表达式,控制计算顺序:\n\n```mira\nlet result = (1 + 2) * 3; // 先计算 1 + 2,然后乘以 3\n```\n\n---\n\n函数声明和调用:\n\n```mira\nfn add(a, b) { a + b }\nlet sum = add(1, 2);\n```\n\n---\n\n记录字面量:\n\n```mira\nlet record = (a: 1, b: 2);\nlet empty = (); // 空记录\n```\n\n---\n\n对于省略键名的单元素记录,必须添加逗号以区别于分组表达式。\n\n```mira\nlet single = (1,);\n```\n",
|
|
68
68
|
"%": "`%` 用于取余。\n\n```mira\n5 % 2; // 1\n```\n",
|
|
69
69
|
"%=": "`%=` 是复合赋值:`x %= y` 等价于 `x = x % y`。\n\n```mira\nlet mut x = 5;\nx %= 2;\n// x == 1\n```\n",
|
|
70
70
|
"+": "`+` 用于加法(中缀)或一元正号(前缀)。\n\n```mira\n1 + 2; // 3\n+1; // 1\n```\n",
|
|
71
71
|
"+=": "`+=` 是复合赋值,`x += y` 等价于 `x = x + y`。\n\n```mira\nlet mut x = 1;\nx += 2;\n// x == 3\n```\n",
|
|
72
72
|
"?": "`?` 用于条件表达式(三元表达式):`cond ? thenExpr : elseExpr`。\n\n```mira\nfn sign { it > 0 ? 1 : it < 0 ? -1 : 0 }\n```\n",
|
|
73
73
|
"?:": "`?:` 用于记录字面量的“可选字段”,当值为 `nil` 时省略该字段。\n\n```mira\n(a?: 1, b?: nil); // (a: 1)\n\n// 省略不会删除已经通过展开引入的同名字段\n(..(a: 1), a?: nil); // (a: 1)\n```\n",
|
|
74
|
-
";": "`;` 用于结束语句。MiraScript
|
|
74
|
+
";": "`;` 用于结束语句。MiraScript 以表达式为主,但在多语句块中使用 `;` 分隔。\n\n```mira\nlet sum = {\n let x = 1;\n let y = 2;\n x + y\n};\n```\n",
|
|
75
75
|
"/": "`/` 用于除法。\n\n```mira\n6 / 3; // 2\n```\n",
|
|
76
76
|
"/=": "`/=` 是复合赋值,`x /= y` 等价于 `x = x / y`。\n\n```mira\nlet mut x = 6;\nx /= 3;\n// x == 2\n```\n",
|
|
77
77
|
"..": "`..` 表示闭区间范围,或在数组/记录字面量及函数调用中表示展开。\n\n---\n\n表示数组字面量、切片和循环的范围:\n\n```mira\nlet arr = [1..3]; // arr = [1, 2, 3]\nlet slice = arr[0..1]; // slice = [1, 2]\n\nfor i in 1..3 {\n // i 依次为 1, 2, 3\n}\n```\n\n---\n\n展开数组/记录或函数调用:\n\n```mira\nlet arr = [1, ..[2, 3]]; // arr = [1, 2, 3]\nlet rec1 = (a: 1, ..(b: 2, c: 3)); // rec1 = (a: 1, b: 2, c: 3)\n// 同名键以最后一个为准\nlet rec2 = (..(1, 2), ..(3, 4, 5)); // rec2 = (0: 3, 1: 4, 2: 5)\n\nlet result = sum(..[1, 2, 3]); // 等同于 sum(1, 2, 3)\n```\n",
|