Parametri passati per riferimento (ref)
Parametri passati per riferimento (ref)
I parametri passati per riferimento in .NET non sono gestibili nella sintassi Lua. Per aggirare il problema, questi parametri vengono ritornati dalla funzione/metodo lua come valori aggiuntivi ai parametri di ritorno definiti dal prototipo di funzione.
//Codice C#: metodo con parametro byRef
public Boolean getFullNameByRef(ref string name)
{
name = _name;
return true;
}
//Codice LUA: il valore viene passato e ritornato.
local person = PersonNew()
person.setFullName("Daniele", "Piazza")
local ns = ""
local res, ns2 = person.getFullNameByRef(ns)
print(ns) -- come prima
print(ns2) -- nuovo valore di ns
Nel caso di parametri passati per riferimento su oggetti COM la cosa si complica. In questo caso sono solo i parametri out che vengono restituiti. Inoltre poiché i parametri out normalmente vengono passati come nil alla funzione il sistema non è in grado di usarne il tipo per identificare l'override corretto da chiamare. Poiché il caso di collisioni su overrides di metodi COM wrappati spero sia abbastanza raro, i parametri out non vengono considerati nella ricerca della funzione da chiamare.
local workpointproxy = nil
workpointproxy = occurrence.CreateGeometryProxy(workpoint, workpointproxy) -- il secondo parametro è nil e viene ritornato