9. 字符串与标准库
标准库分两层:少数高频名(println、map/filter/fold、len、to_string…)
在 prelude 里,随处直接可用;其余都住在模块里,use std/x 引入后用
x.fn(...) 限定调用——字符串在 std/str,还有 std/list、std/map、std/set、
std/bytes、std/io、std/cursor。热名可以选择性引入(use std/str.{trim})。
字符串函数按码点处理。str.split 是字面量分隔(不是正则);join 是它的逆:
use std/str
pub fn main() -> Unit !io = {
let parts = str.split("a,b,c", ",")
println(to_string(len(parts)))
println(join(parts, " - "))
}
在 Playground 打开
3
a - b - c
字符串有三种写法,死角互补:双引号 "..." 支持转义与 $ 插值;三引号 """ 跨行、
剥公共缩进、引号免转义(插值照常);反引号 `...` 是 raw string——无转义、
无插值、可跨行,写正则、代码样本、HTML 片段所见即值(唯一限制:内容不能含反引号):
pub fn main() -> Unit !io = {
println(`"quotes" and $dollar and \n stay literal`)
}
在 Playground 打开
"quotes" and $dollar and \n stay literal
parse_int 把字符串转成 Option[Int](失败是 None,不是异常):
fn parseOr(s: String, fallback: Int) -> Int =
match parse_int(s) {
Some(n) -> n
None -> fallback
}
pub fn main() -> Unit !io = {
println(to_string(parseOr("42", 0)))
println(to_string(parseOr("oops", -1)))
}
在 Playground 打开
42
-1