2012-04-12 7 views
0

bearbeiten ich diese Arbeit hätte, bin ich nicht sicher, ob dies der richtige Weg ist, es zu tun, aber das ist, was jetzt funktioniertVerwendung von Tabellen in anderen Dateien

Ich habe gerade angefangen Lua lernen, und ich Ich versuche herauszufinden, wie Tabellen zwischen Dateien übergeben werden, damit ich einen besser organisierten Codespace haben kann. Ich habe das Buch Programmierung in Lua gelesen und aus irgendeinem Grund kann ich nicht herausfinden, was ich falsch mache.

Das Problem, das ich bin immer ist dieser Fehler:

lua: Test2.lua: 3: Versuch Methode aufzurufen 'Neu' (ein Null-Wert)

Von diesem Code:

--Test.lua---------------- 
module("Test", package.seeall) 
vector = require "./Hump/vector" 

Bot = {} 

Bot.position = vector.new(0,0) 

function Bot:New(object) 
    object = object or {} 
    setmetatable(object, self) 
    self.__index = self 
    return object 
end 


--Test2.lua------------------ 
require "Test" 

Bot1 = Test.Bot:New() 

print(Bot1.position) 

Soweit ich es verstehe, bedeutet dieser Fehler, dass es die Methode nicht neu finden kann, es ist effektiv undefiniert. Ich dachte, dass die Datei im Pfad importiert werden muss?

Antwort

1

Bot ist eine leere Tabelle.

local B = {} -- initialize local B with new table 
Bot = B -- Bot now references the same table as B 

B = { position = vector.new(0,0) } -- here you create a NEW table, B ~= Bot now 

function B:New(object) -- store New function in B table, Bot still empty 

Sie geben also einen leeren Tisch zurück.

Keine Notwendigkeit für zwei Variablen hier überhaupt.

local Bot = { 
    -- stuff 
} 

function Bot:New(object) 
    -- stuff 
end 

return Bot 
+0

Yeah, ich habe gemerkt, dass Zeile 3 wirklich B.position = 0 sein sollte, nach einigen Untersuchungen habe ich dieses funktionierende Modul ("Test", package.seeall) ist dieser richtige Weg, um dieses Problem zu umgehen? – RedShft

+0

Wenn Sie es funktioniert haben, haben Sie Änderungen darüber hinaus gemacht, weil 'Bot' in dem Code, den Sie gepostet haben, ein leerer Tisch ist. Sie sollten auch das '__index =' auf 'Bot' selbst setzen, da es das Metatable ist. Und Sie wollen nicht 'position =' in 'Bot', es sei denn, dies ist eine Klassenvariable (d. H. Für alle Instanzen von' Bot' gleich). Wenn Position für jede "Bot" -Instanz ein eindeutiger Status ist, müssen Sie für das Objekt im Konstruktor "Bot" initialisieren. – Mud

+0

Mein Plan war, eine Klassenvariable für alle Typen Bot zu machen, ja. Was ist der Unterschied zwischen self .__ index = self und self .__ index = Bot? – RedShft

Verwandte Themen