Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit 2561ccb

Browse files
committed
新增STRING_INTERPOLATION_CHANGELOG_v0.4.5.md文件,详细记录字符串插值功能的重大更新,包括模板字符串语法、插值表达式支持、技术实现细节及未来扩展计划,确保用户能够全面了解新特性。
1 parent 5882e76 commit 2561ccb

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
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

Comments
 (0)