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/outputs/codes_from_doc.lua | 60 +++++++++++++++++++++++++++++++ spec/outputs/codes_from_doc_zh.lua | 60 +++++++++++++++++++++++++++++++ spec/outputs/vararg.lua | 72 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 192 insertions(+) (limited to 'spec/outputs') 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