Skip to content

Commit 69f896c

Browse files
committed
Fixed issue #223.
1 parent 1a210df commit 69f896c

9 files changed

Lines changed: 338 additions & 16 deletions

File tree

doc/docs/doc/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,23 @@ tab[] = "Value"
595595
</pre>
596596
</YueDisplay>
597597

598+
You can also use the spread operator `...` to append all elements from one list to another:
599+
600+
```moonscript
601+
tbA = [1, 2, 3]
602+
tbB = [4, 5, 6]
603+
tbA[] = ...tbB
604+
-- tbA is now [1, 2, 3, 4, 5, 6]
605+
```
606+
<YueDisplay>
607+
<pre>
608+
tbA = [1, 2, 3]
609+
tbB = [4, 5, 6]
610+
tbA[] = ...tbB
611+
-- tbA is now [1, 2, 3, 4, 5, 6]
612+
</pre>
613+
</YueDisplay>
614+
598615
### Table Spreading
599616

600617
You can concatenate array tables or hash tables using spread operator `...` before expressions in table literals.
@@ -2465,6 +2482,27 @@ doubled = [item * 2 for item in *items]
24652482
</pre>
24662483
</YueDisplay>
24672484

2485+
In list comprehensions, you can also use the spread operator `...` to flatten nested lists, achieving a flat map effect:
2486+
2487+
```moonscript
2488+
data =
2489+
a: {1,2,3}
2490+
b: {4,5,6}
2491+
2492+
flat = [...v for k,v in pairs data]
2493+
-- flat is now [1, 2, 3, 4, 5, 6]
2494+
```
2495+
<YueDisplay>
2496+
<pre>
2497+
data =
2498+
a: {1,2,3}
2499+
b: {4,5,6}
2500+
2501+
flat = [...v for k,v in pairs data]
2502+
-- flat is now [1, 2, 3, 4, 5, 6]
2503+
</pre>
2504+
</YueDisplay>
2505+
24682506
The for and when clauses can be chained as much as desired. The only requirement is that a comprehension has at least one for clause.
24692507

24702508
Using multiple for clauses is the same as using nested loops:

doc/docs/zh/doc/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,23 @@ tab[] = "Value"
594594
</pre>
595595
</YueDisplay>
596596

597+
你还可以使用展开操作符 `...` 来将一个列表中的所有元素追加到另一个列表中:
598+
599+
```moonscript
600+
tbA = [1, 2, 3]
601+
tbB = [4, 5, 6]
602+
tbA[] = ...tbB
603+
-- tbA 现在为 [1, 2, 3, 4, 5, 6]
604+
```
605+
<YueDisplay>
606+
<pre>
607+
tbA = [1, 2, 3]
608+
tbB = [4, 5, 6]
609+
tbA[] = ...tbB
610+
-- tbA 现在为 [1, 2, 3, 4, 5, 6]
611+
</pre>
612+
</YueDisplay>
613+
597614
### 表扩展
598615

599616
你可以使用前置 `...` 操作符在Lua表中插入数组表或哈希表。
@@ -2425,6 +2442,27 @@ doubled = [item * 2 for item in *items]
24252442
</pre>
24262443
</YueDisplay>
24272444

2445+
在列表推导式中,你还可以使用展开操作符 `...` 来实现对列表嵌套层级进行扁平化的处理:
2446+
2447+
```moonscript
2448+
data =
2449+
a: {1,2,3}
2450+
b: {4,5,6}
2451+
2452+
flat = [...v for k,v in pairs data]
2453+
-- flat 现在为 [1, 2, 3, 4, 5, 6]
2454+
```
2455+
<YueDisplay>
2456+
<pre>
2457+
data =
2458+
a: {1,2,3}
2459+
b: {4,5,6}
2460+
2461+
flat = [...v for k,v in pairs data]
2462+
-- flat 现在为 [1, 2, 3, 4, 5, 6]
2463+
</pre>
2464+
</YueDisplay>
2465+
24282466
for和when子句可以根据需要进行链式操作。唯一的要求是推导式中至少要有一个for子句。
24292467

24302468
使用多个for子句与使用多重循环的效果相同:

spec/inputs/lists.yue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,14 @@ do
267267
f = -> globalTB[#][#] = 1
268268
f1 = -> globalTB[#][# - 1]
269269

270+
do
271+
tbA[] = ...tbB
272+
a, tb[], b[], c = 1, ...x, 3, 4
273+
274+
data =
275+
a: {1,2,3}
276+
b: {4,5,6}
277+
278+
flat = [...v for k,v in pairs data]
279+
270280
nil

spec/outputs/codes_from_doc.lua

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,21 @@ print((function()
147147
end)())
148148
local tab = { }
149149
tab[#tab + 1] = "Value"
150+
local tbA = {
151+
1,
152+
2,
153+
3
154+
}
155+
local tbB = {
156+
4,
157+
5,
158+
6
159+
}
160+
local _len_0 = #tbA + 1
161+
for _index_0 = 1, #tbB do
162+
local _elm_0 = tbB[_index_0]
163+
tbA[_len_0], _len_0 = _elm_0, _len_0 + 1
164+
end
150165
local parts = {
151166
"shoulders",
152167
"knees"
@@ -1080,6 +1095,33 @@ for _index_0 = 1, #_list_0 do
10801095
_len_0 = _len_0 + 1
10811096
end
10821097
doubled = _accum_0
1098+
local data = {
1099+
a = {
1100+
1,
1101+
2,
1102+
3
1103+
},
1104+
b = {
1105+
4,
1106+
5,
1107+
6
1108+
}
1109+
}
1110+
local flat
1111+
local _accum_0 = { }
1112+
local _len_0 = 1
1113+
for k, v in pairs(data) do
1114+
do
1115+
local _obj_0 = _accum_0[_len_0]
1116+
local _len_1 = #_obj_0 + 1
1117+
for _index_0 = 1, #v do
1118+
local _elm_0 = v[_index_0]
1119+
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1120+
end
1121+
end
1122+
_len_0 = _len_0 + 1
1123+
end
1124+
flat = _accum_0
10831125
local x_coords = {
10841126
4,
10851127
5,
@@ -2588,6 +2630,21 @@ print((function()
25882630
end)())
25892631
local tab = { }
25902632
tab[#tab + 1] = "Value"
2633+
local tbA = {
2634+
1,
2635+
2,
2636+
3
2637+
}
2638+
local tbB = {
2639+
4,
2640+
5,
2641+
6
2642+
}
2643+
local _len_0 = #tbA + 1
2644+
for _index_0 = 1, #tbB do
2645+
local _elm_0 = tbB[_index_0]
2646+
tbA[_len_0], _len_0 = _elm_0, _len_0 + 1
2647+
end
25912648
local parts = {
25922649
"shoulders",
25932650
"knees"
@@ -3551,6 +3608,33 @@ for _index_0 = 1, #_list_0 do
35513608
_len_0 = _len_0 + 1
35523609
end
35533610
doubled = _accum_0
3611+
local data = {
3612+
a = {
3613+
1,
3614+
2,
3615+
3
3616+
},
3617+
b = {
3618+
4,
3619+
5,
3620+
6
3621+
}
3622+
}
3623+
local flat
3624+
local _accum_0 = { }
3625+
local _len_0 = 1
3626+
for k, v in pairs(data) do
3627+
do
3628+
local _obj_0 = _accum_0[_len_0]
3629+
local _len_1 = #_obj_0 + 1
3630+
for _index_0 = 1, #v do
3631+
local _elm_0 = v[_index_0]
3632+
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3633+
end
3634+
end
3635+
_len_0 = _len_0 + 1
3636+
end
3637+
flat = _accum_0
35543638
local x_coords = {
35553639
4,
35563640
5,

spec/outputs/codes_from_doc_zh.lua

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,21 @@ print((function()
147147
end)())
148148
local tab = { }
149149
tab[#tab + 1] = "Value"
150+
local tbA = {
151+
1,
152+
2,
153+
3
154+
}
155+
local tbB = {
156+
4,
157+
5,
158+
6
159+
}
160+
local _len_0 = #tbA + 1
161+
for _index_0 = 1, #tbB do
162+
local _elm_0 = tbB[_index_0]
163+
tbA[_len_0], _len_0 = _elm_0, _len_0 + 1
164+
end
150165
local parts = {
151166
"shoulders",
152167
"knees"
@@ -1074,6 +1089,33 @@ for _index_0 = 1, #_list_0 do
10741089
_len_0 = _len_0 + 1
10751090
end
10761091
doubled = _accum_0
1092+
local data = {
1093+
a = {
1094+
1,
1095+
2,
1096+
3
1097+
},
1098+
b = {
1099+
4,
1100+
5,
1101+
6
1102+
}
1103+
}
1104+
local flat
1105+
local _accum_0 = { }
1106+
local _len_0 = 1
1107+
for k, v in pairs(data) do
1108+
do
1109+
local _obj_0 = _accum_0[_len_0]
1110+
local _len_1 = #_obj_0 + 1
1111+
for _index_0 = 1, #v do
1112+
local _elm_0 = v[_index_0]
1113+
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
1114+
end
1115+
end
1116+
_len_0 = _len_0 + 1
1117+
end
1118+
flat = _accum_0
10771119
local x_coords = {
10781120
4,
10791121
5,
@@ -2582,6 +2624,21 @@ print((function()
25822624
end)())
25832625
local tab = { }
25842626
tab[#tab + 1] = "Value"
2627+
local tbA = {
2628+
1,
2629+
2,
2630+
3
2631+
}
2632+
local tbB = {
2633+
4,
2634+
5,
2635+
6
2636+
}
2637+
local _len_0 = #tbA + 1
2638+
for _index_0 = 1, #tbB do
2639+
local _elm_0 = tbB[_index_0]
2640+
tbA[_len_0], _len_0 = _elm_0, _len_0 + 1
2641+
end
25852642
local parts = {
25862643
"shoulders",
25872644
"knees"
@@ -3539,6 +3596,33 @@ for _index_0 = 1, #_list_0 do
35393596
_len_0 = _len_0 + 1
35403597
end
35413598
doubled = _accum_0
3599+
local data = {
3600+
a = {
3601+
1,
3602+
2,
3603+
3
3604+
},
3605+
b = {
3606+
4,
3607+
5,
3608+
6
3609+
}
3610+
}
3611+
local flat
3612+
local _accum_0 = { }
3613+
local _len_0 = 1
3614+
for k, v in pairs(data) do
3615+
do
3616+
local _obj_0 = _accum_0[_len_0]
3617+
local _len_1 = #_obj_0 + 1
3618+
for _index_0 = 1, #v do
3619+
local _elm_0 = v[_index_0]
3620+
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
3621+
end
3622+
end
3623+
_len_0 = _len_0 + 1
3624+
end
3625+
flat = _accum_0
35423626
local x_coords = {
35433627
4,
35443628
5,

spec/outputs/lists.lua

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,4 +857,53 @@ do
857857
end
858858
end
859859
end
860+
do
861+
do
862+
local _obj_0 = tbA
863+
local _len_0 = #_obj_0 + 1
864+
local _list_0 = tbB
865+
for _index_0 = 1, #_list_0 do
866+
local _elm_0 = _list_0[_index_0]
867+
_obj_0[_len_0], _len_0 = _elm_0, _len_0 + 1
868+
end
869+
end
870+
a = 1
871+
do
872+
local _obj_0 = tb
873+
local _len_0 = #_obj_0 + 1
874+
for _index_0 = 1, #x do
875+
local _elm_0 = x[_index_0]
876+
_obj_0[_len_0], _len_0 = _elm_0, _len_0 + 1
877+
end
878+
end
879+
b[#b + 1] = 3
880+
c = 4
881+
local data = {
882+
a = {
883+
1,
884+
2,
885+
3
886+
},
887+
b = {
888+
4,
889+
5,
890+
6
891+
}
892+
}
893+
local flat
894+
local _accum_0 = { }
895+
local _len_0 = 1
896+
for k, v in pairs(data) do
897+
do
898+
local _obj_0 = _accum_0[_len_0]
899+
local _len_1 = #_obj_0 + 1
900+
for _index_0 = 1, #v do
901+
local _elm_0 = v[_index_0]
902+
_obj_0[_len_1], _len_1 = _elm_0, _len_1 + 1
903+
end
904+
end
905+
_len_0 = _len_0 + 1
906+
end
907+
flat = _accum_0
908+
end
860909
return nil

0 commit comments

Comments
 (0)