Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BizHawk 2.1.1:read(“数字”)在Lua中始终返回0_Lua_Emulation - Fatal编程技术网

BizHawk 2.1.1:read(“数字”)在Lua中始终返回0

BizHawk 2.1.1:read(“数字”)在Lua中始终返回0,lua,emulation,Lua,Emulation,我正在尝试运行用Lua编写的出色的Mar I/O人工智能(更多信息,请访问) AI在Bizzhawk emulator(v.2.1.1)的Lua(v.5.1)控制台中成功运行,但我在尝试重新加载算法的先前状态时出错 打开文件后,file:read(“*number”)似乎总是返回0,而read(“*all”)和“*line”都正确读取了内容。我也试过“*n”,但运气不好 完整脚本位于: 生成的文件以以下内容开头: 18[LF] 1938[LF] ... 但我仍然只能在控制台中看到0: cons

我正在尝试运行用Lua编写的出色的Mar I/O人工智能(更多信息,请访问)

AI在Bizzhawk emulator(v.2.1.1)的Lua(v.5.1)控制台中成功运行,但我在尝试重新加载算法的先前状态时出错

打开文件后,file:read(“*number”)似乎总是返回0,而read(“*all”)和“*line”都正确读取了内容。我也试过“*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()格式说明符的详细信息,请参阅。

我发现BizHawk emulator使用的是定制版本的Lua。 此问题出现在emulator的2.1.1版中。以前的版本运行良好


感谢您的帮助社区

在此期间,Bizzhawk添加了一个替代的c#lua实现“kopilua”,以解决严重的问题。kopilua的几个缺点之一是不遵从字符串解析和文件IO。必须使用配置>自定义>高级>Lua+LuaInterface才能使用普通Lua;它不会有这个问题。

看起来随着时间的推移,
“*all”读取整个文件“*line”读取下一行“*number”读取一个数字num读取一个最多有num个字符的字符串
然而,为什么*all和*line可以工作,而不是*numberYes,这是旧的Lua5.0语法。也许用现在的Lua再试试?顺便说一句,我不明白为什么一个明显正确的答案会被否决。。。表示:“io.read中的选项名称不再有起始字符。
*
。为了兼容性,Lua将继续接受(并忽略)此字符。”简单地说,
“*number”
选项仍在Lua 5.3中工作,您的答案没有提供解决OP描述的问题的方法。版本为5.1,因此建议的答案返回错误。我无法尝试使用更新的lua版本,因为它嵌入在控制台模拟器中。对tonumber(file:read())也没有什么好处。顺便说一句,
file:write(pool.generation,“\n”)
更简单。您可以编辑答案以包含受影响的版本吗?这样,这对其他人很有用。完成编辑。由于bizhawk是罪魁祸首,我还将编辑标题以包括这一点
console.writeline("Gen " .. pool.generation) --> "Gen 0"
console.writeline("Max Fitness " .. pool.maxFitness) --> "Max Fitness 0"