Attualmente sto codificando per un plug-in Lightroom. Lightroom non utilizza la versione 5.2. Ho la seguente funzione, che funziona bene al momento, ma sono preoccupato che se Lightroom esegue l'aggiornamento a una versione più recente, questo codice si interromperà. Avete suggerimenti su come fornire la gestione dei vararg in questo caso in modo indipendente dalla versione di lua?Utilizzo di vararg nella versione precedente di Lua, ma voglio compatibilità con 5.2+
Il seguente codice controlla per vedere se la funzione F viene utilizzata come chiave nella tabella needsModule. In tal caso, compone una funzione che include una chiamata per modificare i moduli al valore indicato dal tasto F seguito da una chiamata alla funzione F e dai relativi argomenti.
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
Avvia il corpo della funzione con 'local arg = arg o {...}'. Maggiori informazioni [qui] (http://www.luafaq.org/#T1.23) –
@EgorSkriptunoff: Potresti postarla come risposta? – ruakh
@ruakh - Sfortunatamente, la mia soluzione non è corretta per le funzioni di vararg nidificate in Lua 5.2+ (l''arg' della funzione interna sarà ereditato dalla funzione esterna invece di creare una nuova matrice di parametri). Non vedo una soluzione bella e semplice. Esempio di soluzione non piacevole: 'arg locale = table.pack e {...} o arg' –