diff --git "a/2024.2.5-Matriller-unit\345\255\227\351\235\242\351\207\217\344\275\277\347\224\250\346\263\250\346\204\217.md" "b/2024.2.5-Matriller-unit\345\255\227\351\235\242\351\207\217\344\275\277\347\224\250\346\263\250\346\204\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..76ba237849de68c6355234158e2abb60d3a385a0 --- /dev/null +++ "b/2024.2.5-Matriller-unit\345\255\227\351\235\242\351\207\217\344\275\277\347\224\250\346\263\250\346\204\217.md" @@ -0,0 +1,114 @@ +# unit字面量使用注意 + +## 简述 + +unit字面量有两类写法,一是数组类,一是字典类。两者混用会引发编译错误。 + +### 数组类 + +例程如下 + +```lua +import "stdlib" + +var u = {2020, 2021, 2022, 2023, 2024} + +``` + +数组类的特征是不出现“=”运算符,因而losu会将它解释为一个数组,从1开始索引。 + +对上面的u进行打印 + +```lua +import "stdlib" + +var u = {2020, 2021, 2022, 2023, 2024} + +for index, val in u: + print("index = ", index, ", val = ", val) +; + +``` + +输出如下 + +```bash +index = 1, val = 2020 +index = 2, val = 2021 +index = 3, val = 2022 +index = 4, val = 2023 +index = 5, val = 2024 +``` + +所以2020的索引是1,2021的索引是2,依次类推。 + +### 字典类 + +例程如下 + +```lua +import "stdlib" + +var u = { + name = "Matriller", + age = 18, + language = "zh-cn", + last_time = "2024.2.5" +} + +``` + +字典类字面量的特征就是出现“=”运算符。这时losu会吧对应的值赋到对应的键上。 + +对u进行打印 + +```lua +import "stdlib" + +var u = { + name = "Matriller", + age = 18, + language = "zh-cn", + last_time = "2024.2.5" +} + +for index, val = u: + print("index = ", index, ", val = ", val) +; + +``` + +结果如下 + +```lua +index = language, val = zh-cn +index = name, val = Matriller +index = age, val = 18 +index = last_time, val = 2024.2.5 +``` + +## 混用分析 + +混用的情况,特征就是unit字面量中同时出现了数组类和字典类两种写法。 + +```lua +import "stdlib" + +#这是混用后错误的例子 +var u = { + 2025, + val = "兔年", + age = 20, + "happy" +} + +``` + +这是运行后报的错误 + +```bash +编译错误: 在第 4 行,缺少 `}' 以匹配 `{' +影响到第 6 行 +``` + +如果不知道unit字面量的知识,这个bug会令人迷惑,排查起来难度也很大。(本人亲身经历) diff --git "a/2024.2.5-Matriller-\345\215\225str\345\236\213\345\217\202\346\225\260\345\207\275\346\225\260\350\260\203\347\224\250\346\213\254\345\217\267\347\234\201\347\225\245.md" "b/2024.2.5-Matriller-\345\215\225str\345\236\213\345\217\202\346\225\260\345\207\275\346\225\260\350\260\203\347\224\250\346\213\254\345\217\267\347\234\201\347\225\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..09fe9f4dfa22dab6018f9daa979a4bd38ed571f9 --- /dev/null +++ "b/2024.2.5-Matriller-\345\215\225str\345\236\213\345\217\202\346\225\260\345\207\275\346\225\260\350\260\203\347\224\250\346\213\254\345\217\267\347\234\201\347\225\245.md" @@ -0,0 +1,42 @@ +# 单str型参数函数调用括号省略 + +## 引子 + +import作为一个内置函数,平常的使用都是带括号的。 + +```lua +import("stdlib") +``` + +但是,若博览洛书模块源码,会发现这种写法 + +```lua +import "stdlib" +``` + +这依据于洛书的一个语法糖:单str型参数函数调用括号省略。 + +## 格式 + +格式好理解,即函数名后紧跟着str字面量。而且只能是字面量。如 + +```lua +import "stdlib" + +print "Hello world" + +""" + 这是错误的例子 +""" + +""" + +print "a" & "b" + +""" + +``` + +## 应用 + +其实就是写调用函数的时候更好看一些,尤其是import