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
314314let 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# 获取所有键
807856let 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
10351091let 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
10361108let 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