BizHawk 2.1.1:读取(“*数字”)总是 returns Lua 中的 0

BizHawk 2.1.1: read("*number") always returns 0 in Lua

我正在尝试 运行 用 Lua 编写的辉煌的 Mar I/O 人工智能(更多信息请参见 https://youtu.be/qv6UVOQ0F44

AI 运行在 BizHawk 模拟器 (v.2.1.1) 的 Lua (v.5.1) 控制台中成功运行,但在尝试重新加载时出现错误算法的先前状态。

打开文件后,似乎file:read("*number") 总是return 0,而read("*all") 和"*line" 都读取了内容正确。我也试过 "*n" 但没有成功。

完整脚本位于:https://pastebin.com/ZZmSNaHX

function loadFile(filename)
  local file = io.open(filename, "r")
  pool = newPool()
  pool.generation = file:read("*number")
  pool.maxFitness = file:read("*number")
  ...

function writeFile(filename)
  local file = io.open(filename, "w")
  file:write(pool.generation .. "\n")
  file:write(pool.maxFitness .. "\n")
  ...

生成的文件开头为:

18[LF]
1938[LF]
...

但是,我仍然在控制台中看到 0:

console.writeline("Gen " .. pool.generation) --> "Gen 0"
console.writeline("Max Fitness " .. pool.maxFitness) --> "Max Fitness 0"

同样令人费解的是,此脚本已在不同的论坛中进行过讨论,但似乎没有人报告相同的问题。

读取数字的格式为'n'、file:read('n')。有关 read() 格式说明符的详细信息,请参阅 https://www.lua.org/manual/5.3/manual.html#pdf-file:read

我发现 BizHawk 模拟器使用的是 Lua 的自定义版本。 该问题出现在模拟器的 2.1.1 版本中。以前的版本运行良好。

感谢社区的帮助

大约在那个时候,BizHawk 添加了一个替代的 c# lua 实现 'kopilua' 以解决严重的崩溃问题。 kopilua 的几个缺点之一是不兼容的字符串解析和文件 IO。您必须使用 config > customize > advanced > Lua+LuaInterface 才能使用正常 lua;不会有这个问题。