Skip to content

Commit eacb213

Browse files
committed
添加const内联常量与计算并获取take, 添加print
1 parent e996956 commit eacb213

File tree

7 files changed

+602
-138
lines changed

7 files changed

+602
-138
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mindustry_logic_bang_lang"
3-
version = "0.1.4"
3+
version = "0.2.0"
44
edition = "2021"
55

66
authors = ["A4-Tacks <wdsjxhno1001@163.com>"]

examples/const.mdtlbl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#* 内联常量
2+
* 这是通过 const Var = Value 来定义
3+
* 当使用Value时将会进行一个内联常量查找
4+
* 而内联常量是块定义的, 也就是仅在当前块内有效
5+
* 内联常量的值是一个Value, 也就是说你可以往里面塞一个DExp, 这可以有效的提高代码复用
6+
* Value有一个特殊的值 `$`, 这个值为包裹这个Value的DExp的返回句柄
7+
* 例如 `(x: read $ cell1 0;)`, 其中的`$`代表了这个DExp的返回句柄`x`
8+
*#
9+
10+
const N = 2;
11+
const F = (read $ cell1 0;);
12+
13+
print "N: ";
14+
print N;
15+
16+
print "F: ";
17+
print F;
18+
19+
#* 以上代码会被编译为:
20+
print "N: "
21+
print 2
22+
print "F: "
23+
read _0 cell1 0
24+
print _0
25+
*#
26+
27+
# 由这里可以看出, 常量N的数字2被内联了, 常量F的DExp也被内联了
28+
# 而$被替换为了这个DExp的返回句柄, 这经常用于常量、宏这种不知道返回句柄时

examples/take.mdtlbl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#* take是一个用于计算值的语句,
2+
* 经常用于一个常量中为一个DExp多次使用但只需计算一次的场景
3+
* 语法为 `take Var = Value_L`, 会在此处将`Value_L`进行计算,
4+
* 并且将Var编译为常量, 其值为`Value`的返回句柄
5+
* `Value_L`接受`Value`,
6+
* 但是未指定返回句柄的情况下会不同于`Value_0`这种将其设为`_0`
7+
* 而是每次申请一个只会出现一次的量, 如`__0`, `__1`以此类推
8+
*#
9+
10+
const F = (read $ cell1 0;);
11+
12+
take NUM = F;
13+
print NUM;
14+
print NUM;
15+
16+
take NUM_1 = F;
17+
print NUM_1;
18+
print NUM_1;
19+
20+
#* 以上代码会被编译为
21+
read __0 cell1 0
22+
print __0
23+
print __0
24+
read __1 cell1 0
25+
print __1
26+
print __1
27+
*#
28+
29+
# 可以看到, 我们可以对常量的值计算一次但是多次使用结果
30+
# 如果直接`print F;`, 将会每次都进行计算

0 commit comments

Comments
 (0)