代码块 (Blocks)

块作为表达式

在 Zig 中,块(用花括号 {} 包围)是表达式。这意味着它们可以返回一个值。

可以使用 break 关键字从块中返回值。如果块是标记的(labeled),可以使用 break :label value

test "labeled block" {
    const count = blk: {
        var sum: u32 = 0;
        var i: u32 = 0;
        while (i < 10) : (i += 1) sum += i;
        break :blk sum;
    };
    try expect(count == 45);
}

如果块隐式返回,它等同于返回最后一个表达式的值(类似于 Rust 或 Ruby,但需要 break 关键字)。实际上,在 Zig 中,通常使用标签块来返回值,或者对于简单的作用域,不返回值。

变量遮蔽 (Shadowing)

Zig 严格禁止变量遮蔽。这意味着你不能声明一个与外部作用域中已存在的标识符同名的变量。

fn foo() void {
    const x = 1;
    {
        const x = 2; // 编译错误:标识符 'x' 重复声明
    }
}

这有助于防止由于意外引用错误的变量而导致的错误,并使代码更易于阅读。

空块 (Empty Blocks)

空块 {} 是类型为 void 的表达式。

const x = {}; // x 的类型是 void