BizHawk 2.1.1:Lua 中的 read("*number") 总是返回 0

我正在尝试运行用 Lua 编写的 Mar I/O 人工智能(更多内容请参见https://youtu.be/qv6UVOQ0F44)。该人工智能在 BizHawk 模拟器(v.2.1.1)的 Lua(v.5.1)控制台中成功运行,但在尝试重新加载算法的先前状态时却遇到了错误。

打开文件后,似乎 file:read("*number") 将始终返回 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"

更令人困惑的是,这个脚本已经在不同的论坛中讨论过,但没有人报告相同的问题。

点赞
用户2420301
用户2420301

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

2017-07-26 11:51:47
用户5230856
用户5230856

我发现 BizHawk 模拟器正在使用定制版的 Lua。这个问题出现在模拟器的 2.1.1 版本中。之前的版本都运行正常。

感谢社区的帮助。

2017-07-26 17:19:41
用户4253427
用户4253427

大约在那个时间,BizHawk添加了另一种C# Lua实现'kopilua',以解决深度崩溃问题。Kopilua的几个缺点之一是不兼容的字符串解析和文件IO。您必须使用config> customize> advanced> Lua+LuaInterface才能使用普通的lua;它不会有这个问题。

2018-01-23 08:51:23