Lua牛奶厂错误。

我一直在用Lunadry来为我重新格式化代码,但我遇到了错误,具体来说,当我尝试时会出现这种情况:

lua: ./lunadry.lua:322: assertion failed!
stack traceback:
    [C]: in function 'assert'
    ./lunadry.lua:322: in main chunk
    [C]: in ?

现在,我已经检查了我拥有的大块代码,并将这个错误的来源追踪到了这个特定的函数...

function e.insertvalues(e,...)g(1,e,'table')local n,t
if y('#',...)==1 then
n,t=#e+1,...else
n,t=...end
if#t>0 then
for n=#e,n,-1 do
e[n+#t]=e[n]end
local i=1-n
for n=n,n+#t-1 do
e[n]=t[n+i]end
end
return e
end

(是的,它应该看起来丑陋)

更具体地说,删除这段代码可以使它再次正常工作:

if y('#',...)==1 then
n,t=#e+1,...else
n,t=...end

正是…else和…end部分导致它出错。

我一直在试图让它重新格式化代码,让它看起来漂亮,但它会导致错误。就我所知,这可能只是作者代码中一系列错误的复制,但我希望不是这样。这是执行魔术的文件的源代码:点我

有谁能看一下这个,告诉我需要改变什么来解决这个非常烦人的错误?谢谢!

点赞
用户4734293
用户4734293

这是由于将 ... 视为关键字导致的。例如,lunadry.lua 的实例:

K "..."

应该是

C "..."

使用此修补程序:

diff --git a/lunadry.lua b/lunadry.lua
index e056140..19d714b 100755
--- a/lunadry.lua
+++ b/lunadry.lua
@@ -201,7 +201,7 @@ local lua = lpeg.locale {
           K "true" +
           V "Number" +
           V "String" +
-          K "..." +
+          C "..." +
           V "function" +
           V "tableconstructor" +
           V "functioncall" +
@@ -251,8 +251,8 @@ local lua = lpeg.locale {

   funcbody = C "(" * V "whitespace" * (V "parlist" * V "whitespace")^-1 * C ")" * INDENT_INCREASE(V "block" * V "whitespace") * INDENT * K "end";

-  parlist = V "namelist" * (V "whitespace" * C "," * SPACE * V "whitespace" * K "...")^-1 +
-            K "...";
+  parlist = V "namelist" * (V "whitespace" * C "," * SPACE * V "whitespace" * C "...")^-1 +
+            C "...";

   tableconstructor = FLATTEN(C "{" * (INDENT_INCREASE(V "filler" * V "fieldlist" * V "filler") * INDENT + V "filler") * C "}");

我会在今天稍后提交修复。

2015-03-31 14:19:19