Wieso lässt sich in Lua ein Objekt einer Klasse nicht anlegen?

Hallo,
ich habe kaum Erfahrung mit der Programmiersprache Lua und komme aus dem .Net bzw. Java Umfeld, jedoch sollten solche die Grundlagen einigermaßen einem Informatiker auch so klar sein.

Zum Kern der Frage:

Ich möchte mir in Lua folgendes Objekt erzeugen

romania = Graph:new( {'Or', 'Ne', 'Ze', 'Ia', 'Ar', 'Si', 'Fa',
              'Va', 'Ri', 'Ti', 'Lu', 'Pi', 'Ur', 'Hi',
              'Me', 'Bu', 'Dr', 'Ef', 'Cr', 'Gi'},
             {
            {'Or', 'Ze', 71}, {'Or', 'Si', 151},
            {'Ne', 'Ia', 87}, {'Ze', 'Ar', 75},
            {'Ia', 'Va', 92}, {'Ar', 'Si', 140},
            {'Ar', 'Ti', 118}, {'Si', 'Fa', 99},
            {'Si', 'Ri', 80}, {'Fa', 'Bu', 211},
            {'Va', 'Ur', 142}, {'Ri', 'Pi', 97},
            {'Ri', 'Cr', 146}, {'Ti', 'Lu', 111},
            {'Lu', 'Me', 70}, {'Me', 'Dr', 75},
            {'Dr', 'Cr', 120}, {'Cr', 'Pi', 138},
            {'Pi', 'Bu', 101}, {'Bu', 'Gi', 90},
            {'Bu', 'Ur', 85}, {'Ur', 'Hi', 98},
            {'Hi', 'Ef', 86}
             },
             false ) 

Und dies sei der dazugehörige Konstruktor:

function Graph:new(Vertices, Edges, Directed)
   local matrix = {}
 
   for i, e in pairs(Edges) do
      matrix[self:SetHash(e[1], e[2])] = e[3]
      if not Directed then matrix[self:SetHash(e[2], e[1])] = e[3] end
   end
   
   local vertex_lookup = {}
   for i, v in pairs(Vertices) do
      vertex_lookup[v] = i
   end

   local num_v = #Vertices
   
   return setmetatable({ vertices = Vertices, vertex_lookup = vertex_lookup,
             adj = matrix, num_v = num_v  },
               Graph_mt)
end

Nun ist es so, dass mit dem "new" mein "romania" Objekt trotzdem leer bleibt/ weiterhin auf null bzw. nil verweißt. Ich verstehe nicht, wieso keine Objekte erzeugt werden, vielleicht überssehe ich auch einfach etwas?

Computer, Schule, programmieren, Java, C-plus-plus, C Sharp, Informatik, lua
1 Antwort