sml

SML { ❄ }

第 6 章:环境变量与转义

第 6 章:环境变量与转义

本章讲两件"让配置更安全、更通用"的小事:环境变量注入字符串转义

6.1 环境变量:$env.VAR

配置里常有敏感值(API Key、密码)或随环境变化的值(域名、端口)。把这些写死在文件里既不安全也不灵活。SML 用 $env.VAR 在解析期从环境变量读取:

secrets {
    resendApiKey: $env.RESEND_API_KEY
    dbPassword: $env.DB_PASSWORD
    optionalWebhook: $env.UNSET_WEBHOOK   # 未设置 -> 空串,不报错
}

要点:

等价 JSON 必须把明文写死;SML 让"配置"与"密钥"解耦。

6.2 字符串转义

引号字符串里支持常见转义:

转义 含义
\n 换行
\t 制表符
\\ 反斜杠本身
\" 引号本身
\u{XXXX} / \uXXXX Unicode 码点,转为 UTF-8

示例:

banner: "SML \u{1F680} 上线 \n第二行\t制表"
label: "雪花 \u{2744} snow"
path: "C:\\Program Files\\app"

\u{2744} 会被解析成雪花字符

转义只在引号字符串内生效。裸词(不加引号的值)不支持转义,需要特殊字符就用引号包起来。

6.3 动手试一试

  1. 写配置引用环境变量:
    database {
        url: $env.DATABASE_URL
        pool: 16
    }
    
  2. 在运行解析器前设置 DATABASE_URL=postgres://localhost/app,确认解析结果里 url 被正确填充。
  3. 试一个带 emoji 的字段:
    greeting: "你好 \u{1F44B}"
    

第 7 章:多语言使用

动手练习

读完本章,在下面的编辑器里直接修改 SML 并点“运行”,立刻看到解析结果或校验错误——有输出才能高效学习。

✍ 动手练习 写一个 secrets 块,含 apiKey: $env.RESEND_API_KEY 与 dbPassword: $env.DB_PASSWORD;再写一个 banner 字符串用 \u{1F680} 转义 emoji。
💡 提示:在浏览器里无法设真实环境变量,所以 $env.X 会解析为空串——这是预期行为,验证也据此判定。
✍ 自测考题:第 6 章自测:环境变量与转义 得分 0 / 4
Q1. 把环境变量注入值用哪个语法?
Q2. 浏览器里跑 playground 时,$env.X 通常解析成什么?
Q3. 判断:\u{1F680} 会在字符串里被转义成一个 emoji 字符。
Q4. 下面哪个转义是 SML 支持的?