https://zhuanlan.zhihu.com/p/710454898
仓颉语言 0.53.4,Mac 下试用编写 木兰入门用的猜数字例程。
在那之前,手痒先在最小的main例程里试加了个函数调用:
main() {
println("你好")
你好()
}
你好() {
println("吃了吗")
}
报错:
error: expected declaration, found '你好'
==> tests/hi.cj:6:1:
|
6 | 你好() {
| ^^^^ expected declaration here
|
# note: only declarations or macro expressions can be used in the top-level
看文档发现函数定义要用 func 关键词。
main() {
想的 = 40
猜的 = 50
println("你好")
}
报错:
error: undeclared identifier '想的'
==> tests/hi.cj:2:3:
|
2 | 想的 = 40
| ^
|
error: undeclared identifier '猜的'
==> tests/hi.cj:3:3:
|
3 | 猜的 = 50
| ^
|
2 errors generated, 2 errors printed.
看文档发现有三种变量:可变/不可变变量、常量。第二不知何意,先略过。
main() {
const 想的 = 40
var 猜的 = 50
println("你好")
}
报警:
warning: unused variable:'想的'
==> tests/hi.cj:2:9:
|
2 | const 想的 = 40
| ^^^^ unused variable
|
# note: this warning can be suppressed by setting the compiler option `-Woff unused`
直接拷贝了木兰条件判断代码:
main() {
const 想的 = 40
var 猜的 = 50
if 猜的 > 想的 {
println("大了")
} elif 猜的 < 想的 {
println("小了")
} else {
println("中了!")
}
}
报三错,看起来条件部分要加小括号:
error: expected '(' after 'if', found '猜的'
==> tests/hi.cj:4:6:
|
4 | if 猜的 > 想的 {
| ~~ ^^^^ expected '(' here
| |
| after this
|
error: expected ';' or '<NL>', found '猜的'
==> tests/hi.cj:6:10:
|
6 | } elif 猜的 < 想的 {
| ^^^^ expected ';' or '<NL>' here
|
error: expected expression or declaration, found '}'
==> tests/hi.cj:11:1:
|
11 | }
| ^ expected expression or declaration here
|
加了之后,第一个报错解决,但后两个仍在。看来是关键词有误,文档发现是 else if 而非 elif。这个设计让 if 判断仅用两个关键词,也更自然。
改了之后,报三个警:
warning: unreachable block in 'if' expression
==> tests/hi.cj:6:10:
|
6 | } else if (猜的 < 想的) {
| __________^
7 | | println("小了")
| | ...
10 | | }
| |___^ unreachable block in 'if' expression
|
# note: this warning can be suppressed by setting the compiler option `-Woff unused`
warning: unreachable block in 'if' expression
==> tests/hi.cj:6:31:
|
6 | } else if (猜的 < 想的) {
| ___________________________^
7 | | println("小了")
8 | | } else {
| |___^ unreachable block in 'if' expression
|
# note: this warning can be suppressed by setting the compiler option `-Woff unused`
warning: unreachable block in 'if' expression
==> tests/hi.cj:8:10:
|
8 | } else {
| __________^
9 | | println("中了!")
10 | | }
| |___^ unreachable block in 'if' expression
|
# note: this warning can be suppressed by setting the compiler option `-Woff unused`
3 warnings generated, 3 warnings printed.
怎么觉得只应该有对应后两个block的两个报警呢?
下面加随机数,拜托文档里例程支持拷贝代码吧省得手敲。文档里提到了不可变变量就是类型由初值表达式确定,哦那该叫“类型不变变量”吧。
from std import random.*
main() {
let 想的 = Random()
var 猜的 = 50
if (猜的 > 想的) {
println("大了")
} else if (猜的 < 想的) {
println("小了")
} else {
println("中了!")
}
}
报错:
error: expected declaration, found 'from'
==> tests/hi.cj:1:1:
|
1 | from std import random.*
| ^^^^ expected declaration here
|
# note: only declarations or macro expressions can be used in the top-level
1 error generated, 1 error printed.
卡住了,待续。
对了,文档里标识符还只提了英文,早点更新吧。