的Lua闭包在实施DSL

问题描述:

Lua中有加上功能的一个非常好的无括号调用语法倒闭让我写下面的Lua闭包在实施DSL

local tag = 1 
function test(obj) 
    return 
     function(str) 
      return 
      function (tbl) 
       tbl.objtag = tag 
       tbl.objname = str 
       return tbl 
      end 
     end 

end 
test (tag) "def" 
{ 
} 

test tag "def" --error 
{ 
} 

但是,如果我身边(标签)删除括号,它导致编译错误。那么为什么Lua允许无括号参数(即“def”)而不是无括号var(在这种情况下是表)参数?

Programming in Lua

如果函数有一个单一的参数,这个参数可以是文字字符串或表的构造,那么括号是可选的:

我你上面的理解情况是标记是一个局部变量(既不是文字字符串也不是表格构造函数),所以test(tag)总是需要括号。您不需要需要围绕"def"括号,因为test(tag)返回接受单个字符串的函数,并且该函数立即应用于"def"

+1

谢谢你的解释。我是如此接近完全成熟的DSL ... – jameszhao00 2009-09-13 16:30:35

+0

是否有任何理由不能通过某种“预处理器”将输入传递给DSL以将括号放在所有内容中? – 2009-09-13 16:47:02

+0

是的,找到了金属。它完成你所描述的内容。 – jameszhao00 2009-09-13 18:28:59