Aktualnie koduję wtyczkę Lightroom. Lightroom nie używa wersji 5.2. Mam następującą funkcję, która obecnie działa dobrze, ale obawiam się, że jeśli program Lightroom zaktualizuje się do nowszej wersji, ten kod zostanie przerwany. Czy masz sugestie dotyczące obsługi varargs w tym przypadku w sposób niezależny od lua?Używanie varargs we wcześniejszej wersji Lua, ale chcę kompatybilności z 5.2+
Poniższe kod sprawdza czy funkcja F służy jako klucz w tabeli needsModule. Jeśli tak, tworzy funkcję obejmującą wywołanie zmiany modułów na wartość wskazywaną przez klucz F, po którym następuje wywołanie funkcji F i jej argumenty.
local function wrapFOM(F,...)
local openModule = needsModule[F]
if openModule == nil then
return function() return F(unpack(arg)) end
end
return function()
if LrApplicationView.getCurrentModuleName() ~= openModule then
LrApplicationView.switchToModule(openModule)
end
return F(unpack(arg)) --proper tail call
end
end
Ciało funkcji startowej z 'local arg = arg lub {...}'. Więcej informacji [tutaj] (http://www.luafaq.org/#T1.23) –
@EgorSkriptunoff: Czy możesz to opublikować jako odpowiedź? – ruakh
@ruakh - Niestety, moje rozwiązanie jest niepoprawne dla zagnieżdżonych funkcji vararg w Lua 5.2+ (funkcja wewnętrzna 'arg' będzie dziedziczona z funkcji zewnętrznej zamiast tworzenia nowej tablicy parametrów). Nie widzę dobrego i prostego rozwiązania. Przykład niezbyt fajnego rozwiązania: 'local arg = table.pack i {...} lub arg' –