跳转至

括号

小括号

参数列表

小括号用于表示参数列表。

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 }; // 这样是错误的,因为没指定所有字段的名称