2017-10-03 5 views
1

Versuch this simple Lua example (unter Verwendung des verbesserten Code in dem zweiten post) zu replizieren, stieß ich auf die folgende seltsame Frage:Lua erfordert einen Fehler, wenn das Skript "table.lua" heißt?

ich den Code wörtlich kopiert, sondern passierte die erste Datei „table.lua“ nennen (anstelle von "funcs.lua"). Die zweite Datei hieß "main.lua" wie im Beispiel.

In meinem Fall, was ich versuchte, bekam ich immer die beliebte Fehlermeldung „ein ttempt Feld‚myfunc‘zu nennen (ein Null-Wert)“ (als ob die Aussage erfordern hatte ignoriert worden, aber Weg usw. waren alle in Ordnung).

Nach zwei Stunden versuchen, und nach Informationen der Jagd, ich mehr oder weniger auf einer Ahnung umbenannt die erste Datei aus „table.lua“ auf „tabble.lua“, und dann hat alles sofort wie erwartet. Umbenennung in z.B. "tables.lua" wird auch funktionieren.

Da ich Lua sehr neu bin, möchte ich immer noch verstehen, was genau falsch gelaufen ist. Anfangs dachte ich, der Grund könnte sein, dass "Tabelle" ein reserviertes Lua-Wort ist, aber alle Referenzen, die ich überprüfte, listet es nicht als solches auf.

Also, was ist hier los?

Ich verwende LuaForWindows v5.1.4-46 mit dem mitgelieferten SciTE Editor/IDE (v.1.75).

Danke für alle Hinweise.

+0

Es wird einfacher zu helfen, wenn Sie den Code, den Sie verwenden, in Ihrem eigenen Beitrag statt über einen Link geben. –

Antwort

3

die Standardbibliotheken math, io, string, ... und table sind vordefiniert (und vorbelastete) in der Lua Interpreter. Da Caches-Module nach Name angefordert werden, wird require "table" die Standardbibliothek table zurückgeben, anstatt Ihr eigenes Modul table aus einer Datei zu laden.

Eine gute Möglichkeit, das Problem zu lösen, besteht darin, einen Ordner zu erstellen und Ihre Bibliotheksdateien dort zu speichern. Wenn der Ordner mylib heißt, wird require "mylib.table" funktionieren und die Datei laden.

Alternativ, wenn Sie nur einmal die Datei laden müssen und müssen nicht die Eigenschaften require (die Datei in einer Reihe von Verzeichnissen, Caching geladene Bibliotheken Suche) können Sie loadfile verwenden: Ändern require "table" zu loadfile "./table.lua"() (wo ./table.lua sollte der vollständige (relative ist in Ordnung) Pfad zu der Datei sein.)

+0

Das erklärt es in der Tat. Ich dachte nicht an die Bibliotheken, nur an reservierte Wörter. (Upvote unsichtbar wegen meines Mangels an Street Cred.) –