Ziglings 笔记 07: 多行字符串的艺术


告别转义地狱

在处理完基础字符串后,Ziglings 的第七个练习向我展示了 Zig 如何优雅地处理大段文本。

如果你写过 C 语言,你可能记得把长字符串拆成多行时是多么痛苦(需要手动加 \n 或者用反斜杠连接)。Python 的 """ 虽然好用,但在代码缩进深处往往会引入不需要的空格。

Zig 给出了一种独特的解决方案。

挑战:打印歌词

任务是创建一个包含多行文本的常量,用来打印一段关于 Zig 作者 Andrew Kelley 的歌词。

解决方案

这是我的代码实现:

const std = @import("std");

pub fn main() void {
    // Zig 使用双反斜杠 \\ 来表示多行字符串
    const lyrics =
        \\Ziggy played guitar
        \\Jamming good with Andrew Kelley
        \\And the Spiders from Mars
    ;

    std.debug.print("{s}\n", .{lyrics});
}

核心知识点总结

1. 独特的 \\ 语法

Zig 没有使用“开始标记”和“结束标记”来包裹多行字符串,而是采用了行前缀的方式。 每一行都以 \\ 开头。这看起来有点像注释(//),但它是数据。

2. 解决了“缩进难题”

这种语法的最大好处在于清晰。 无论你的代码缩进有多深,你都可以把 \\ 对齐到当前的缩进层级。编译器会自动忽略 \\ 之前的所有空白,只保留 \\ 之后的内容。这让代码看起来非常整洁。

3. 原生支持引号

\\ 后面,你不需要对双引号 " 进行转义。

const json =
    \\{
    \\    "name": "Zig",
    \\    "type": "Language"
    \\}
;

这使得 Zig 非常适合在源码中嵌入 JSON、HTML 或 Shader 代码。


后续预告:数据类型和字符串都已掌握,接下来我们将进入真正的逻辑控制领域——如何判断真假(if/else)。