我是Lua的新手,我从事过项目工作,我有一个问题,不知道":"我没有在手册中找到它,例如如何解释这段代码:
res:template{
main = 'functionform.html',
functionjs = '_functionform.js',
functionform = '_functionform.html'
}
答案 0 :(得分:6)
Lua中的冒号操作员 PIL 是一种小合成糖。它在面向对象的Lua中使用,使常规函数调用看起来更像是方法调用。它的作用是在调用函数时将对象作为self
参数传递。举个例子:
a.myFunction(a, 'foo')
它相当于:
a:myFunction('foo')
在您的示例中,方法调用省略了括号,因为它的唯一参数是表 PIL ,因此没有冒号运算符的函数调用将类似于:
res.template(res, {
main = 'functionform.html',
functionjs = '_functionform.js',
functionform = '_functionform.html'
})
正如你所看到的,这个小小的合成糖非常方便
答案 1 :(得分:5)
来自section 2.5.8中的手册:
Lua中的函数调用具有以下语法:
functioncall :: = prefixexp args
在函数调用中,首先计算prefixexp和args。如果 prefixexp的值有类型函数,然后调用该函数 用给定的参数。否则,prefixexp“调用”metamethod 调用,作为第一个参数,后面是prefixexp的值 通过原始的调用参数(见§2.8)。
表格
functioncall :: = prefixexp`:'Name args
可用于调用“方法”。调用v:name(args)是语法糖 对于v.name(v,args),除了v仅计算一次。
因此res:template{}
与res.template(res, {})
相同。
答案 2 :(得分:3)
冒号操作员添加了一个隐藏的'方法定义中的参数和方法调用中的参数。 (例如本/自我)
http://www.lua.org/pil/16.html
因此,对模板功能的调用提供了隐藏的参数' self'您可以通过它访问定义函数的对象。