如何在Lua中将外部文件用作表?
我想制作一个程序,从列表中随机选择一个怪物,给用户一个可用武器的列表,并允许他们选择使用哪种武器。我想使用外部文件来存储武器的数据,而不是在Lua文件本身中添加表。我尝试使用Lua文件将数据存储为表 我有一个名为swarm.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
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
的含义)会返回一个由存储在该文件中的字符串描述的表中的项?