Zamiast długiej listy argumentów w moich definicji funkcji, wolę zdać kilka parametrów stałych i tabelę „dodatkowe params” tak:LUA: Poszukujesz wydajne i bezbłędne środki przypisywania domyślnych argumentów
function:doit(text, params)
end
To miło, ponieważ pozwala mi dodawać nowe nazwane parametry później bez zrywania starych połączeń.
Problem mam przeżywa występuje przy próbie wymuszenia wartości domyślne dla niektórych params:
function:doit(text, params)
local font = params.font or native.systemBold
local fontSize = params.fontSize or 24
local emboss = params.emboss or true
-- ...
end
Powyższy kod działa poprawnie we wszystkich przypadkach, z wyjątkiem gdzie przeszły w „false” na wytłaczanie :
doit("Test text", { fontSize = 32, emboss = false })
Powyższy kod spowoduje, że wytłoczenie zostanie ustawione na true, gdy naprawdę chcę mieć wartość false.
Aby było jasne, chcę, aby pierwsza wartość nie-NIL została przypisana do płaskorzeźby, zamiast tego otrzymuję pierwszą nie-fałszywą i nie-NIL.
Aby zwalczyć ten problem Napisałem kawałek kodu, aby znaleźć pierwszą wartość non-NIL w tabeli i do powrotu, że:
function firstNotNil(...)
for i = 1, #arg do
local theArg = arg[i]
if(theArg ~= nil) then return theArg end
end
return nil
end
Za pomocą tej funkcji chciałbym ponownie napisać zadanie etapie wytłaczania jako to:
local emboss = firstNotNil(params.emboss, true)
Teraz to na pewno działa, ale wydaje się tak nieefektywne i przesadzone. Mam nadzieję, że istnieje bardziej zwarty sposób robienia tego.
Uwaga: znalazłem ten rubinowy konstrukt, który wyglądał obiecująco i mam nadzieję lua ma coś podobnego:
[c,b,a].detect { |i| i > 0 } -- Assign first non-zero in order: c,b,a
Czy sprawdziłeś [to poprzednie pytanie] (http://stackoverflow.com/questions/6022519/define-default-values-for-function-arguments) na podobny temat? – hugomg
"Wydaje się tak nieefektywne" Czy masz rzeczywiste dane profilowania, aby to poprzeć, czy jest to jedna z tych rzeczy, których nie powinieneś się martwić? –