2017-07-26 57 views
2

我試圖運行(關於這一點,在https://youtu.be/qv6UVOQ0F44)書面lua燦爛的三月I/O人工智能返回0BizHawk 2.1.1:讀取( 「*號」)總是在Lua

的AI成功運行在BizHawk仿真器(2.1.1版)的Lua中(v.5.1)控制檯,而是試圖重新加載算法的先前狀態時,我得到一個錯誤。

打開文件後,它似乎是文件:讀(「*號」)總是會返回0,而讀(「*所有」)和「*行」既正確讀取內容。我也嘗試過「* 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" 

什麼也令人費解這個劇本是在不同的論壇上討論過的,似乎沒有人報道過這個劇本問題。

+0

順便說一句,'文件:寫(pool.generation, 「\ n」)'更簡單。 – lhf

回答

2

我發現了BizHawk仿真器使用Lua的定製版本。 此問題出現在仿真器的2.1.1版中。以前的版本工作正常。

感謝您的幫助社區

+1

你可以編輯你的答案,包括受影響的版本?這樣可以對其他人有用。 – nobody

+0

完成編輯。由於bizhawk是罪魁禍首,我還將編輯標題以包含該標題 – sousben

0

格式讀取數目是 'N',文件:讀( 'N')。有關read()格式說明符的詳細信息,請參閱https://www.lua.org/manual/5.3/manual.html#pdf-file:read

+0

它看起來像這樣隨時間發生變化: '「*所有」 \t讀取整個文件 「*行」 \t讀取下一行 「*號」 \t讀取數 NUM \t讀取一個字符串,最多爲num characters' https://www.lua.org/pil/21.1.html 然而,爲什麼會*所有和*線工作,而不是*數量 – sousben

+0

是的,這是舊的Lua 5.0語法。也許重新嘗試一下當前的Lua?順便說一句,我不明白爲什麼一個明顯正確的答案得到downvoted ... –

+1

[Lua手冊](https://www.lua.org/manual/5.3/manual.html#8.2)說,「選項名稱在io .read不再有'*'開始,爲了兼容性,Lua將繼續接受(並忽略)這個字符。「簡單地說,'* number''選項在Lua 5.3中仍然有效,並且您的答案不提供解決OP描述的問題的方法。 –

0

在那個時候,BizHawk在努力要解決深crashy問題增加了一個備用C#盧阿實行「kopilua」。 Kopilua的幾個缺點之一是不兼容的字符串解析和文件IO。您必須使用config> customize> advanced> Lua + LuaInterface才能使用正常的lua;它不會有這個問題。