我是Lua的新手,我从事过项目工作,我有一个问题,不知道":"我没有在手册中找到它,例如如何解释这段代码:
res:template{
main = 'functionform.html',
functionjs = '_functionform.js',
functionform = '_functionform.html'
}
Run Code Online (Sandbox Code Playgroud)
Lua中的结肠操作员PIL是一种小的合成糖.它用于面向对象的Lua,使常规函数调用看起来更像是方法调用.它的作用是self在调用函数时将对象作为参数传递.举个例子:
a.myFunction(a, 'foo')
Run Code Online (Sandbox Code Playgroud)
它相当于:
a:myFunction('foo')
Run Code Online (Sandbox Code Playgroud)
在您的示例中,方法调用省略了括号,因为它的唯一参数是表PIL,因此没有冒号运算符的函数调用将类似于:
res.template(res, {
main = 'functionform.html',
functionjs = '_functionform.js',
functionform = '_functionform.html'
})
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这种小合成糖非常方便
从2.5.8节中的手册:
Lua中的函数调用具有以下语法:
functioncall :: = prefixexp args
在函数调用中,首先计算prefixexp和args.如果prefixexp的值具有type函数,则使用给定的参数调用此函数.否则,调用prefixexp"call"元方法,将prefixexp的值作为第一个参数,后跟原始调用参数(参见§2.8).
表格
functioncall :: = prefixexp`:'名称args
可以用来称呼"方法".调用v:name(args)是v.name(v,args)的语法糖,除了v只计算一次.
所以res:template{}是一样的res.template(res, {}).