Skip to content

Commit 177085c

Browse files
committed
docs: Update the language reference documentation.
1 parent 4e7a515 commit 177085c

File tree

1 file changed

+115
-22
lines changed

1 file changed

+115
-22
lines changed

LANGUAGE_REFERENCE.md

Lines changed: 115 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
# Chen Lang 语言参考
1+
**版本**: 0.2.0
22

3-
**版本**: 0.1.0
4-
5-
**更新日期**: 2025-12-30
3+
**更新日期**: 2026-02-01
64

75
---
86

@@ -308,7 +306,9 @@ let status = if age >= 18 { "adult" } else { "minor" }
308306

309307
### For 循环
310308

311-
Chen Lang 的 for 循环是条件循环:
309+
Chen Lang 的 `for` 循环非常灵活, 支持条件循环、无限循环以及集合迭代。
310+
311+
#### 1. 条件循环 (Go 风格)
312312
313313
```python
314314
let i = 0
@@ -318,6 +318,55 @@ for i < 10 {
318318
}
319319
```
320320
321+
#### 2. 无限循环
322+
323+
```python
324+
for {
325+
if some_condition() {
326+
break
327+
}
328+
}
329+
```
330+
331+
#### 3. 集合迭代 (For-In)
332+
333+
可以使用 `for...in` 语法遍历数组、对象、字符串以及协程。它会自动调用集合的
334+
`:iter()` 方法。
335+
336+
```python
337+
# 遍历数组值
338+
let arr = ["A", "B", "C"]
339+
for x in arr {
340+
println(x)
341+
}
342+
343+
# 遍历对象值
344+
let obj = ${ a: 1, b: 2 }
345+
for v in obj {
346+
println(v)
347+
}
348+
349+
# 遍历字符串字符
350+
for char in "Hello" {
351+
println(char)
352+
}
353+
```
354+
355+
#### 4. 键值对迭代 (Entries)
356+
357+
如果需要同时获取索引/键和值,可以使用 `:entries()` 方法。它会返回一个包含 `key`
358+
`value` 属性的对象。
359+
360+
```python
361+
for e in arr:entries() {
362+
println("Index: " + e.key + ", Value: " + e.value)
363+
}
364+
365+
for e in obj:entries() {
366+
println("Key: " + e.key + ", Value: " + e.value)
367+
}
368+
```
369+
321370
### Break 和 Continue
322371
323372
```python
@@ -664,10 +713,10 @@ let io = import "stdlib/io"
664713
665714
### 常用标准库模块
666715
667-
| 模块路径 | 返回对象包含的成员 | 说明 |
668-
| :--------------- | :----------------------------------------- | :---------------- |
669-
| `stdlib/io` | `print`, `println`, `readline` | 标准输入输出 |
670-
| `stdlib/json` | `stringify`, `parse` | JSON 序列化与解析 |
716+
| 模块路径 | 返回对象包含的成员 | 说明 |
717+
| :--------------- | :-------------------------------- | :---------------- |
718+
| `stdlib/io` | `print`, `println`, `readline` | 标准输入输出 |
719+
| `stdlib/json` | `stringify`, `parse` | JSON 序列化与解析 |
671720
| `stdlib/date` | `new`, `now`, `parse` | 日期时间处理 |
672721
| `stdlib/fs` | `read_to_string`, `write_file`| 文件系统操作 |
673722
| `stdlib/http` | `get`, `post`| HTTP 客户端 |
@@ -805,6 +854,13 @@ let obj = ${
805854
806855
# 获取所有键
807856
let keys = obj:keys() # ["name", "age", "city"]
857+
858+
# 获取迭代器 (仅返回值)
859+
let it = obj:iter()
860+
861+
# 获取键值对迭代器
862+
let entries = obj:entries()
863+
# 返回的对象结构为: ${ key: "name", value: "Alice" }
808864
```
809865
810866
### 元表函数
@@ -1029,12 +1085,28 @@ A: 使用 `println()` 输出调试信息,查看错误消息中的行号定位问
10291085
10301086
### Q: 如何遍历数组?
10311087
1032-
A: 使用 for 循环配合 `len()` 方法:
1088+
A: 推荐使用 `for...in` 语法直接遍历:
10331089
10341090
```python
10351091
let arr = [1, 2, 3]
1092+
for x in arr {
1093+
println(x)
1094+
}
1095+
```
1096+
1097+
如果需要索引,请使用 `:entries()`:
1098+
1099+
```python
1100+
for e in arr:entries() {
1101+
println(e.key + ": " + e.value)
1102+
}
1103+
```
1104+
1105+
传统的索引遍历依然有效:
1106+
1107+
```python
10361108
let i = 0
1037-
for i < arr.len() {
1109+
for i < arr:len() {
10381110
println(arr[i])
10391111
i = i + 1
10401112
}
@@ -1082,20 +1154,41 @@ for i < arr.len() {
10821154
10831155
### 数组方法
10841156
1085-
| 方法 | 说明 |
1086-
| ----------------- | ------------------------- |
1087-
| `arr.len()` | 返回数组长度 |
1088-
| `arr.push(value)` | 添加元素到末尾,返回新长度 |
1089-
| `arr.pop()` | 移除并返回最后一个元素 |
1157+
| 方法 | 说明 |
1158+
| ----------------- | ---------------------------------------- |
1159+
| `arr:len()` | 返回数组长度 |
1160+
| `arr:push(value)` | 添加元素到末尾, 返回新长度 |
1161+
| `arr:pop()` | 移除并返回最后一个元素 |
1162+
| `arr:iter()` | 返回一个仅产生值的迭代器 (用于 `for-in`) |
1163+
| `arr:entries()` | 返回一个产生 `{key, value}` 对象的迭代器 |
10901164
10911165
### 字符串方法
10921166
1093-
| 方法 | 说明 |
1094-
| ------------- | -------------- |
1095-
| `str.len()` | 返回字符串长度 |
1096-
| `str.upper()` | 转换为大写 |
1097-
| `str.lower()` | 转换为小写 |
1098-
| `str.trim()` | 去除首尾空白 |
1167+
| 方法 | 说明 |
1168+
| ------------- | -------------------------------------------- |
1169+
| `str:len()` | 返回字符串长度 |
1170+
| `str:upper()` | 转换为大写 |
1171+
| `str:lower()` | 转换为小写 |
1172+
| `str:trim()` | 去除首尾空白 |
1173+
| `str:iter()` | 返回一个产生每个字符的迭代器 (用于 `for-in`) |
1174+
1175+
### 对象方法
1176+
1177+
| 方法 | 说明 |
1178+
| --------------- | ---------------------------------------- |
1179+
| `obj:keys()` | 返回对象所有键名组成的数组 |
1180+
| `obj:iter()` | 返回一个仅产生值的迭代器 (用于 `for-in`) |
1181+
| `obj:entries()` | 返回一个产生 `{key, value}` 对象的迭代器 |
1182+
1183+
### 协程 (Coroutine)
1184+
1185+
协程是 Chen Lang 处理异步和迭代的核心。
1186+
1187+
| 方法 | 说明 |
1188+
| ------------- | --------------------------------------------- |
1189+
| `co:resume()` | 恢复运行协程 |
1190+
| `co:status()` | 返回协程状态 ("suspended", "running", "dead") |
1191+
| `co:iter()` | 返回协程自身, 以便直接在 `for-in` 中使用 |
10991192
11001193
---
11011194

0 commit comments

Comments
 (0)