【问题标题】:BizHawk 2.1.1: read("*number") always returns 0 in LuaBizHawk 2.1.1:在 Lua 中 read("*number") 总是返回 0
【发布时间】:2017-07-26 11:46:24
【问题描述】:

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

AI 在 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"

同样令人费解的是,这个脚本已经在不同的论坛上讨论过了,似乎没有人报告同样的问题。

【问题讨论】:

  • 顺便说一句,file:write(pool.generation,"\n") 更简单。

标签: lua emulation


【解决方案1】:

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

感谢您的帮助社区

【讨论】:

  • 您能否编辑您的答案以包含受影响的版本?这样,这对其他人有用。
  • 完成编辑。由于 bizhawk 是罪魁祸首,我还将编辑标题以包含它
【解决方案2】:

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

【讨论】:

  • 看起来这随着时间的推移发生了变化:"*all" reads the whole file "*line" reads the next line "*number" reads a number num reads a string with up to num characters lua.org/pil/21.1.html 然而,为什么 *all 和 *line 可以工作,而不是 *number
  • 是的,这是旧的 Lua 5.0 语法。也许用当前的 Lua 重试?顺便说一句,我不明白为什么一个明显正确的答案会被否决......
  • Lua manual 说,“io.read 中的选项名称不再以* 开头。为了兼容性,Lua 将继续接受(并忽略)这个字符。”简单来说,"*number" 选项在 Lua 5.3 中仍然有效,您的回答并没有提供解决 OP 描述的问题的方法。
  • 版本为 5.1,因此建议的答案返回错误。我无法尝试使用更新的 lua 版本,因为它嵌入在控制台模拟器中。 tonumber(file:read()) 也没有运气
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 2015-06-26
    • 2019-02-27
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多