Lua中的“:”是什么意思

时间:2014-11-24 17:10:20

标签: lua

我是Lua的新手,我从事过项目工作,我有一个问题,不知道":"我没有在手册中找到它,例如如何解释这段代码:

res:template{
        main = 'functionform.html',
        functionjs = '_functionform.js',
        functionform = '_functionform.html'
    }

3 个答案:

答案 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'您可以通过它访问定义函数的对象。