9. 字符串与标准库

标准库分两层:少数高频名(printlnmap/filter/foldlento_string…) 在 prelude 里,随处直接可用;其余都住在模块里,use std/x 引入后用 x.fn(...) 限定调用——字符串在 std/str,还有 std/liststd/mapstd/setstd/bytesstd/iostd/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