括号¶
小括号¶
参数列表¶
小括号用于表示参数列表。
fn my_func1() {
println("Hello, world!");
}
fn my_func2(i32 a, i32 b) {
println(a + b);
}
在不会引起歧义的情况下,可以省去小括号。
fn my_func1 {
println "Hello, world!";
}
函数调用¶
小括号用于表示函数调用。
fn my_func() {
println("Hello, world!");
}
my_func();
在不会引起歧义的情况下,可以省去小括号。
fn my_func {
println "Hello, world!";
}
my_func;
中括号¶
索引¶
中括号用于表示索引。
val a = [1, 2, 3, 4, 5];
println(a[0]);
val a = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
];
println(a[0][0]); // 可以使用多个中括号
println(a[0, 0]); // 也可以使用逗号分隔
列表¶
中括号用于表示列表。列表是一种有序的集合,其中的元素可以重复。
列表的可变与不可变由中括号前的 var
val
关键字决定。
var [1, 2, 3, 4, 5] // 可变列表
val [1, 2, 3, 4, 5] // 不可变列表
在不会引起歧义的情况下,可以省去 val
关键字。
// 可以省去的情况,定义一个不可变列表
val a = [1, 2, 3, 4, 5];
// 不可以省去的情况
class MyClass {
fn \call(List</int/> list) {
return list;
}
}
MyClass my_var;
my_var(val [1, 2, 3, 4, 5]); // 此时这行代码只能省去小括号或 val 二选一
my_var [1, 2, 3, 4, 5]; // 这样将会导致被解析为 \index 运算符
// 而 MyClass 没有实现其重载,故而报错
矩阵¶
矩阵是列表的一种扩展形式,使用类似 matlab 的语法。
val a = [
1, 2, 3; // 以分号分隔行
4, 5, 6;
7, 8, 9;
];
println(a[0, 0]); // 1
println(a[1, 1]); // 5
println(a[2, 2]); // 9
大括号¶
代码块¶
大括号用于表示代码块。
当大括号内直接存在 ;
时,判定为代码块。
if (true) {
println("Hello, world!");
}
映射¶
大括号用于表示映射。映射中的元素由键值对组成。
映射的可变与不可变由大括号前的 var
val
关键字决定。
var { "a": 1, "b": 2, "c": 3 } // 可变映射
val { "a": 1, "b": 2, "c": 3 } // 不可变映射
在不会引起歧义的情况下,可以省去 val
关键字。
// 可以省去的情况,定义一个不可变映射
val a = { "a": 1, "b": 2, "c": 3 };
结构体¶
大括号用于表示结构体初始化。
Point p = {.x = 1, .y = 2 };
在指定所有字段名称的情况下,可以隐式创建一个临时结构体类型。
val p = {.x = 1, .y = 2 }; // 创建一个临时结构体类型并创建变量 p
// 注意临时的结构体没有也不能添加任何成员函数
val p = {.x = 1, 2 }; // 这样是错误的,因为没指定所有字段的名称