字符串(String)
字符串写在双引号里,是 UTF-8 文本。它的完整形态有四种,见下表:
| 写法 | 转义 | 插值 | 跨行 |
|---|---|---|---|
"..." | 支持 | 无 | 无 |
$"..." | 支持 | 支持 | 无 |
r"..." / r#"..."# | 无 | 无 | 支持 |
r$"..." / r$#"..."# | 无 | 支持 | 支持 |
转义全集
普通字符串与 $ 插值串支持以下转义(与 char 字面量同表):
| 转义 | 含义 |
|---|---|
\n \r \t \0 | 换行、回车、制表、空字符 |
\ \" \' | 反斜杠、双引号、单引号 |
\xHH | 恰好两位十六进制的码位 |
\u{HEX} | 花括号内任意位十六进制;超出 10FFFF 或落入代理区报 MS1004 |
非法转义报 MS1004,但仍会被消费掉。普通字符串不能跨行:源码里的真实换行按未终止处理。
raw 字符串
raw 字符串(r 开头)不认转义、不插值,写什么就是什么,字面段可直接跨行。# 数量须闭合配对,非配对的 " 是普通字符,所以 r#"..."# 里可以带 ":
val path = r"C:\Users\Mushreb";
print(path);
val poem = r#"第一行
第二行 "带引号"
第三行"#;
print(poem);C:\Users\Mushreb
第一行
第二行 "带引号"
第三行r 后必须紧跟 " 或 #" 才触发 raw,否则 r 按普通标识符解析。字符串里要同时有转义、跨行和插值时,用 r$#"..."#(见字符串插值)。
注意
- 字符串不可变:没有任何方法能改一个已有的字符串,所有「变形」都产出新串;
- 字符串长度按字形簇计,
"a🙂b"的长度是 3,细节见 Unicode 与字形簇; - 查、切、变形、格式化等操作面集中在文本处理一页;
- 字符串到数值的解析不走转换,走
T(v)解析通道(int(s)等,见类型转换)。
最后更新于 2026年10月7日
