Ich habe diesen Code nicht ein Prototyp ist:Warum ist es die gleiche Tabelle, obwohl es
function createRect(x, y, w, h)
local rect = {
type = "rect",
x = x,
y = y,
w = w,
h = h,
translate = function(rect, vector)
assert(vector.type == "vector2d")
local rect = shapes.createRect(rect.x + vector.x, rect.y + vector.y, rect.w, rect.h)
end,
}
return rect
end
translate = function(rect, vector)
assert(vector.type == "vector2d")
local rect = shapes.createRect(rect.x + vector.x, rect.y + vector.y, rect.w, rect.h)
end
local o = createRect(2,3,4,5)
local q = createRect(2,3,4,5)
print(o.translate, q.translate, translate)
die einige sehr einfache Code und ist in Lua zu Testfactory Funktionen geschrieben und erinnert sehr an die JS Modulmuster. Etwas, worüber sich Leute normalerweise beschweren, wenn sie über Fabrikfunktionen sprechen, ist der Speicherbedarf. Da o
und q
nur zugewiesen sind, haben sie natürlich unterschiedliche Funktionen, vermutete ich. Ich war jedoch als falsch erwiesen:
function: 0x7fcdbe600d50 function: 0x7fcdbe600d50 function: 0x7fcdbe600d90
Warum ist das? Wie kann das überhaupt sein? Ich nahm o.translate
und q.translate
werden verschiedene Funktionen sein, aber sie sind die gleichen ...