From 7ee395d918b97795f151c24ed877bfcc2edf602a Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 25 Dec 2025 00:00:08 +0800 Subject: Added named vararg support. --- spec/inputs/vararg.yue | 44 +++++++++++++++++++++++ spec/outputs/codes_from_doc.lua | 60 +++++++++++++++++++++++++++++++ spec/outputs/codes_from_doc_zh.lua | 60 +++++++++++++++++++++++++++++++ spec/outputs/vararg.lua | 72 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 236 insertions(+) (limited to 'spec') diff --git a/spec/inputs/vararg.yue b/spec/inputs/vararg.yue index 6100250..4f8a0d7 100644 --- a/spec/inputs/vararg.yue +++ b/spec/inputs/vararg.yue @@ -86,3 +86,47 @@ join = (...) -> print ... nil +do + f1 = (...t) -> + print t.n + print #t + for i = 1, t.n + print t[i] + + f1 1, 2, 3 + f1 "a", "b", "c", "d" + f1! + + f2 = (...args) -> + print "args count:", args.n + print "args length:", #args + for i = 1, args.n + if args[i] == nil + print "position", i, "is nil" + else + print "position", i, ":", args[i] + + f2 1, nil, 3, nil, 5 + + f3 = (prefix, ...items) -> + result = {} + for i = 1, items.n + result[i] = prefix .. tostring items[i] + result + + f3 "item_", 1, 2, 3 + + f4 = (...empty) -> + print "empty count:", empty.n + print "empty length:", #empty + + f4! + + process = (...data) -> + sum = 0 + for i = 1, data.n + if type(data[i]) == "number" + sum += data[i] + sum + + process 1, 2, 3, "skip", 5 diff --git a/spec/outputs/codes_from_doc.lua b/spec/outputs/codes_from_doc.lua index d6617a9..de5abdd 100644 --- a/spec/outputs/codes_from_doc.lua +++ b/spec/outputs/codes_from_doc.lua @@ -737,6 +737,36 @@ end local first = select(1, ...) return print(ok, count, first) end)(fn(true)) +local f +f = function(...) + local t = { + n = select("#", ...), + ... + } + print("argument count:", t.n) + print("table length:", #t) + for i = 1, t.n do + print(t[i]) + end +end +f(1, 2, 3) +f("a", "b", "c", "d") +f() +local process +process = function(...) + local args = { + n = select("#", ...), + ... + } + local sum = 0 + for i = 1, args.n do + if args[i] ~= nil and type(args[i]) == "number" then + sum = sum + args[i] + end + end + return sum +end +process(1, nil, 3, nil, 5) Rx.Observable.fromRange(1, 8):filter(function(x) return x % 2 == 0 end):concat(Rx.Observable.of('who do we appreciate')):map(function(value) @@ -3215,6 +3245,36 @@ end local first = select(1, ...) return print(ok, count, first) end)(fn(true)) +local f +f = function(...) + local t = { + n = select("#", ...), + ... + } + print("argument count:", t.n) + print("table length:", #t) + for i = 1, t.n do + print(t[i]) + end +end +f(1, 2, 3) +f("a", "b", "c", "d") +f() +local process +process = function(...) + local args = { + n = select("#", ...), + ... + } + local sum = 0 + for i = 1, args.n do + if args[i] ~= nil and type(args[i]) == "number" then + sum = sum + args[i] + end + end + return sum +end +process(1, nil, 3, nil, 5) Rx.Observable.fromRange(1, 8):filter(function(x) return x % 2 == 0 end):concat(Rx.Observable.of('who do we appreciate')):map(function(value) diff --git a/spec/outputs/codes_from_doc_zh.lua b/spec/outputs/codes_from_doc_zh.lua index ec84112..6a6c38c 100644 --- a/spec/outputs/codes_from_doc_zh.lua +++ b/spec/outputs/codes_from_doc_zh.lua @@ -737,6 +737,36 @@ end local first = select(1, ...) return print(ok, count, first) end)(fn(true)) +local f +f = function(...) + local t = { + n = select("#", ...), + ... + } + print("参数个数:", t.n) + print("表长度:", #t) + for i = 1, t.n do + print(t[i]) + end +end +f(1, 2, 3) +f("a", "b", "c", "d") +f() +local process +process = function(...) + local args = { + n = select("#", ...), + ... + } + local sum = 0 + for i = 1, args.n do + if args[i] ~= nil and type(args[i]) == "number" then + sum = sum + args[i] + end + end + return sum +end +process(1, nil, 3, nil, 5) Rx.Observable.fromRange(1, 8):filter(function(x) return x % 2 == 0 end):concat(Rx.Observable.of('who do we appreciate')):map(function(value) @@ -3209,6 +3239,36 @@ end local first = select(1, ...) return print(ok, count, first) end)(fn(true)) +local f +f = function(...) + local t = { + n = select("#", ...), + ... + } + print("参数个数:", t.n) + print("表长度:", #t) + for i = 1, t.n do + print(t[i]) + end +end +f(1, 2, 3) +f("a", "b", "c", "d") +f() +local process +process = function(...) + local args = { + n = select("#", ...), + ... + } + local sum = 0 + for i = 1, args.n do + if args[i] ~= nil and type(args[i]) == "number" then + sum = sum + args[i] + end + end + return sum +end +process(1, nil, 3, nil, 5) Rx.Observable.fromRange(1, 8):filter(function(x) return x % 2 == 0 end):concat(Rx.Observable.of('who do we appreciate')):map(function(value) diff --git a/spec/outputs/vararg.lua b/spec/outputs/vararg.lua index 254aa6a..9f97681 100644 --- a/spec/outputs/vararg.lua +++ b/spec/outputs/vararg.lua @@ -294,3 +294,75 @@ join = function(...) end return nil end +do + local f1 + f1 = function(...) + local t = { + n = select("#", ...), + ... + } + print(t.n) + print(#t) + for i = 1, t.n do + print(t[i]) + end + end + f1(1, 2, 3) + f1("a", "b", "c", "d") + f1() + local f2 + f2 = function(...) + local args = { + n = select("#", ...), + ... + } + print("args count:", args.n) + print("args length:", #args) + for i = 1, args.n do + if args[i] == nil then + print("position", i, "is nil") + else + print("position", i, ":", args[i]) + end + end + end + f2(1, nil, 3, nil, 5) + local f3 + f3 = function(prefix, ...) + local items = { + n = select("#", ...), + ... + } + local result = { } + for i = 1, items.n do + result[i] = prefix .. tostring(items[i]) + end + return result + end + f3("item_", 1, 2, 3) + local f4 + f4 = function(...) + local empty = { + n = select("#", ...), + ... + } + print("empty count:", empty.n) + return print("empty length:", #empty) + end + f4() + local process + process = function(...) + local data = { + n = select("#", ...), + ... + } + local sum = 0 + for i = 1, data.n do + if type(data[i]) == "number" then + sum = sum + data[i] + end + end + return sum + end + return process(1, 2, 3, "skip", 5) +end -- cgit v1.2.3-55-g6feb