2017-10-03 8 views
1

Essayer de reproduire this simple Lua example (en utilisant le code amélioré dans la seconde post), j'ai rencontré la question étrange suivante:Lua nécessite une erreur si le script s'appelle "table.lua"?

J'ai copié le code mot pour mot, mais est arrivé à appeler le premier fichier « table.lua » (au lieu de "funcs.lua"). Le deuxième fichier s'appelait "main.lua" comme dans l'exemple.

Dans mon cas, tout ce que j'ai essayé, je me suis toujours le message d'erreur populaire « un champ « myfunc » appel ttempt à (une valeur nulle) » (comme si l'require avait été ignorée, mais chemin, etc. étaient tous en ordre).

Après deux heures d'essayer et la chasse pour info, je plus ou moins sur une intuition rebaptisés le premier fichier de « table.lua » à « tabble.lua », puis tout fonctionnait rapidement comme prévu. Renommer par ex. "tables.lua" fonctionnera également. Comme je suis très nouveau avec Lua, j'aimerais quand même comprendre ce qui s'est mal passé. Initialement, je pensais que la raison pourrait être que "table" est un mot Lua réservé, mais toutes les références que j'ai vérifiées ne le listent pas en tant que tel.

Alors, que se passe-t-il ici? J'utilise LuaForWindows v5.1.4-46 avec l'éditeur SciTE/IDE inclus (v.1.75).

Merci pour tous les conseils.

+0

Il sera plus facile d'aider si vous donnez le code que vous utilisez dans votre propre message, au lieu d'un lien. –

Répondre

3

Les bibliothèques standard math, io, string, ..., et table sont pré-définis (et pré-chargé) dans l'interpréteur Lua. Parce que nécessite des modules de caches par le nom, en disant require "table" renverra la bibliothèque standard table au lieu de charger votre propre module table à partir d'un fichier.

Une bonne façon de résoudre le problème consiste à créer un dossier et à y placer vos fichiers de bibliothèque. Si le dossier est appelé mylib, alors require "mylib.table" fonctionnera et chargera le fichier.

Alternativement, si vous avez juste besoin de charger le fichier une fois et ne pas besoin des fonctionnalités de require (recherche le fichier dans un certain nombre de répertoires, la mise en cache des bibliothèques chargées) vous pouvez utiliser loadfile: Changer require "table" à loadfile "./table.lua"() (où ./table.lua devrait être le chemin complet (relatif est bien) au fichier.)

+0

Cela l'explique en effet. N'a pas pensé aux bibliothèques, seulement des mots réservés. (Upvote invisible en raison de mon manque de crédibilité de la rue.) –