如何在 Lua 中使用外部文件作为表格?

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

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

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

我正在尝试使用

wep = io.open("sword.lua", "r")
print(wep:read("*a"))
print(wep[1])

第一个打印返回文件中的所有文本,其内容为

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

第二个打印应该返回表中的第一项。但无论何时执行此操作,我都会从第二个打印中得到一个空值。文件正在被读取,如第一个打印中列出的文本,但我该如何使其读取作为我程序中可以使用的表格?

点赞
用户1944004
用户1944004

使用 require 函数从文件中加载表格。例如,将下面的代码

return { 'sword', '10', '1', '100' }

保存为 sword.lua。为什么我只用 return 而不是分配给一个变量呢?因为这样更加灵活。如果我在文件中将表格分配给变量 sword,我就会被锁定于这个命名规则,而且我还会污染全局命名空间,使名称冲突更加可能。

使用上述解决方案,我也可以将其分配给局部变量,如下所示:

local sword = require("sword")
print(table.concat(sword,", "))

另一个优点是调用 require 会被缓存,即使您多次调用 require("sword"),您只需要加载一次。但是请注意,由于缓存,您总是会获得对相同表的句柄,即如果您修改从 require("sword") 返回的表,这些修改将被所有实例共享。

在 Wandbox 上的示例

2018-12-31 21:36:34