Lua中的":"代表什么意思?

我是 Lua 的新手,我在项目上工作,我遇到了一个问题,就是不太理解 ":"。在手册上找不到该符号的说明。例如,我该如何解释下面这段代码:

res:template{
        main = 'functionform.html',
        functionjs = '_functionform.js',
        functionform = '_functionform.html'
    }
点赞
用户3529754
用户3529754

冒号操作符会在方法的定义中添加一个额外的“隐式”参数,并在方法调用中添加一个参数(例如 this / self)。

http://www.lua.org/pil/16.html

因此,调用模板函数会提供隐式参数“self”,通过它可以访问定义函数所在的对象。

2014-11-24 17:14:45
用户258523
用户258523

2.5.8 章节 手册中可以了解到:

Lua 中的函数调用的语法如下:

functioncall ::= prefixexp args

在函数调用中,首先会对 prefixexp 和 args 进行计算。如果 prefixexp 的类型是函数,那么这个函数将使用给定的参数进行调用。否则,将调用 prefixexp "call" 元方法,该元方法的第一个参数是 prefixexp 的值,其后是原始的调用参数(参见 §2.8)。

下列形式

functioncall ::= prefixexp `:´ Name args

可以用于调用 "方法",v:name(args) 的调用语法糖等同于调用 v.name(v,args),但只需要计算 v 一次。

所以,res:template{} 等同于 res.template(res, {})

2014-11-24 17:14:55
用户3465182
用户3465182

Lua中的冒号操作符PIL是一种语法糖。它在面向对象的Lua中使用,使普通的函数调用看起来更像方法调用。它的作用是在调用函数时将对象作为self参数传递。以这个例子为例:

a.myFunction(a, 'foo')

它相当于:

a:myFunction('foo')

在你的例子中,方法调用省略了括号,因为它的唯一参数是一个表PIL,所以没有冒号操作符的函数调用将会是这样的:

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

因此你可以看到,这种语法糖非常方便。

2014-11-24 17:24:12