|
| 1 | +# CodeNothing 字符串插值功能 - v0.4.5(2025-07-26) |
| 2 | + |
| 3 | +## 🚀 重大新功能:字符串插值 |
| 4 | + |
| 5 | +字符串插值是一种强大的特性,允许开发者在字符串中嵌入表达式,使字符串构建更加简洁、直观和可读。 |
| 6 | + |
| 7 | +### ✨ 新增功能 |
| 8 | + |
| 9 | +#### 1. 模板字符串语法 |
| 10 | +- **使用反引号** (`` ` ``) 定义模板字符串 |
| 11 | +- **表达式嵌入**:使用 `${...}` 语法在字符串中嵌入表达式 |
| 12 | +- **多行字符串**:支持换行,保留格式 |
| 13 | + |
| 14 | +#### 2. 插值表达式支持 |
| 15 | +- **变量插值**:`${name}` |
| 16 | +- **表达式插值**:`${a + b}` |
| 17 | +- **函数调用插值**:`${getTime()}` |
| 18 | +- **嵌套字符串插值**:`${`内部${value}`}` |
| 19 | +- **三元运算符插值**:`${condition ? "真" : "假"}` |
| 20 | + |
| 21 | +### 🔧 技术实现 |
| 22 | + |
| 23 | +#### AST扩展 |
| 24 | +```rust |
| 25 | +// 新增表达式类型 |
| 26 | +Expression::StringInterpolation(Vec<StringInterpolationSegment>) |
| 27 | + |
| 28 | +// 字符串插值片段枚举 |
| 29 | +enum StringInterpolationSegment { |
| 30 | + Text(String), // 普通文本片段 |
| 31 | + Expression(Box<Expression>), // 表达式片段 |
| 32 | +} |
| 33 | +``` |
| 34 | + |
| 35 | +#### 词法分析器增强 |
| 36 | +- 识别反引号字符串 |
| 37 | +- 分离文本片段和表达式片段 |
| 38 | +- 特殊标记处理 (`INTERP_START`, `INTERP_TEXT`, `INTERP_EXPR`, `INTERP_END`) |
| 39 | + |
| 40 | +#### 解析器增强 |
| 41 | +- 解析字符串插值表达式 |
| 42 | +- 处理嵌套表达式 |
| 43 | +- 表达式求值 |
| 44 | + |
| 45 | +#### 执行器增强 |
| 46 | +- 连接文本片段 |
| 47 | +- 计算表达式值并转换为字符串 |
| 48 | +- 处理不同类型值的字符串转换 |
| 49 | + |
| 50 | +### 📝 语法示例 |
| 51 | + |
| 52 | +```cn |
| 53 | +// 1. 简单变量插值 |
| 54 | +name : string = "世界"; |
| 55 | +greeting : string = `你好,${name}!`; // 结果: "你好,世界!" |
| 56 | +
|
| 57 | +// 2. 表达式插值 |
| 58 | +a : int = 5; |
| 59 | +b : int = 3; |
| 60 | +result : string = `${a} + ${b} = ${a + b}`; // 结果: "5 + 3 = 8" |
| 61 | +
|
| 62 | +// 3. 函数调用插值 |
| 63 | +message : string = `当前时间是:${getTimeString()}`; |
| 64 | +
|
| 65 | +// 4. 嵌套插值 |
| 66 | +c : int = 10; |
| 67 | +nested : string = `嵌套插值:${`内部值: ${c * 2}`}`; // 结果: "嵌套插值:内部值: 20" |
| 68 | +
|
| 69 | +// 5. 条件插值 |
| 70 | +score : int = 85; |
| 71 | +grade : string = `等级: ${score >= 90 ? "优秀" : score >= 80 ? "良好" : score >= 60 ? "及格" : "不及格"}`; |
| 72 | +// 结果: "等级: 良好" |
| 73 | +
|
| 74 | +// 6. 多行插值 |
| 75 | +multiline : string = `多行字符串 |
| 76 | +第一行:${a} |
| 77 | +第二行:${b}`; |
| 78 | +``` |
| 79 | + |
| 80 | +### 🔄 兼容性 |
| 81 | +- 完全向后兼容 |
| 82 | +- 常规双引号字符串仍然可用 |
| 83 | +- 字符串连接 (`+`) 操作符仍然有效 |
| 84 | + |
| 85 | +### 📚 使用场景 |
| 86 | +- 动态消息构造 |
| 87 | +- 模板生成 |
| 88 | +- 复杂字符串格式化 |
| 89 | +- 多语言支持 |
| 90 | +- HTML/XML生成 |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## 🔮 未来扩展计划 |
| 95 | + |
| 96 | +### 1. 格式化控制 |
| 97 | +考虑添加对字符串格式化的扩展支持,例如: |
| 98 | +```cn |
| 99 | +`${value:fmt}` // 其中fmt是格式说明符 |
| 100 | +`${number:2f}` // 保留2位小数 |
| 101 | +``` |
| 102 | + |
| 103 | +### 2. 模板引擎 |
| 104 | +基于字符串插值构建更完整的模板引擎,支持条件、循环等控制结构。 |
| 105 | + |
| 106 | +### 3. 原始字符串 |
| 107 | +添加对不转义特殊字符的原始字符串 (raw string) 支持: |
| 108 | +```cn |
| 109 | +r`原始字符串,不对\n等特殊字符进行转义` |
| 110 | +``` |
| 111 | + |
| 112 | +### 4. 标记模板 |
| 113 | +支持类似JavaScript标记模板的功能: |
| 114 | +```cn |
| 115 | +html`<div>${content}</div>` |
| 116 | +``` |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +这个版本为CodeNothing带来了现代字符串处理的强大功能,使字符串操作更加简洁、表达力更强,同时保持了语言的简单性和易用性。 |
0 commit comments