看代碼至關簡單直觀,以爲怎麼都不會出錯,可運行結果明明就是錯了 - 對着vim摸着腦殼就是想不出哪裏有問題,可去掉新加的代碼,就又能夠了。vim
沒辦法,只好祭出殺手鐗:一行一行註釋掉來觀察。。。函數
反映問題的代碼段至關簡單:spa
if condition then local v = create_object(mpr) if condition2 then v.R = "fixedR" end return v.MP .. v.R end
被影響的是和v同類的一些object,但是這個代碼裏怎麼看都沒問題,v是被我改了,可那是local的啊,管我怎麼改對全局都不會有影響。code
當註釋掉這一行試了一下發現能夠以後,帶着難以想象的心情,檢查起來,而後去看create_object()這個函數:blog
object_cache = {} function create_object(mpr) if object_cache[mpr] then return object_cache[mpr] end local obj = split(mpr) object_cache[mpr] = obj return obj end
原來我改的東西,不是local的,而是全局的,放在一張全局表的cache。。。it
這裏爲了提升效率,把處理過的東西cache起來了,create_object只要是相同的輸入,返回的都是同一個object。。。io