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)。