Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Lua中将外部文件用作表?_Lua_Lua Table - Fatal编程技术网

如何在Lua中将外部文件用作表?

如何在Lua中将外部文件用作表?,lua,lua-table,Lua,Lua Table,我想制作一个程序,从列表中随机选择一个怪物,给用户一个可用武器的列表,并允许他们选择使用哪种武器。我想使用外部文件来存储武器的数据,而不是在Lua文件本身中添加表。我尝试使用Lua文件将数据存储为表 我有一个名为swarm.lua的文件,它和我想要访问它的信息的程序在同一个文件夹中。它包含 sword = {'sword', '10', '1', '100'} 我正在尝试使用 wep = io.open("sword.lua", "r") print(wep:read("*a")) print

我想制作一个程序,从列表中随机选择一个怪物,给用户一个可用武器的列表,并允许他们选择使用哪种武器。我想使用外部文件来存储武器的数据,而不是在Lua文件本身中添加表。我尝试使用Lua文件将数据存储为表

我有一个名为swarm.lua的文件,它和我想要访问它的信息的程序在同一个文件夹中。它包含

sword = {'sword', '10', '1', '100'}
我正在尝试使用

wep = io.open("sword.lua", "r")
print(wep:read("*a"))
print(wep[1])
第一次打印返回文件中的所有文本

"sword = {'sword', '10', '1', '100'}" 

第二个应该返回表中的第一项。每次我这样做,我从第二次打印得到一个零值。正在读取文件,如列出文本的第一次打印所示,但如何使其将文件作为可在程序中使用的表格读取。

要从文件加载表格,请使用
require
功能。例如,保存

return { 'sword', '10', '1', '100' }
作为
剑.lua
。为什么我只使用
return
而不是赋值给变量?这是因为这样更灵活。如果我将表分配给文件中的变量
swarm
,我会被锁定在命名约定中,而且会污染全局名称空间,从而更容易发生名称冲突

使用上面的解决方案,我还可以指定一个局部变量,如下所示

local sword = require("sword")
print(table.concat(sword,", "))
另一个优点是对
require
的调用是缓存的,即即使您多次
require(“剑”)
,您也只需支付加载一次的费用。但是请记住,由于缓存的原因,您总是会获得同一个表的句柄,即如果您更改从
require(“swarm”)
返回的表,这些修改将由所有实例共享

“第二个应该返回表中的第一项”为什么?为什么您希望打印一个文件(这就是
wep
的含义)会返回一个由存储在该文件中的字符串描述的表中的项?