linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
Lua-面向?qū)ο笾泻瘮?shù)使用時(shí)冒號(hào)(:)和點(diǎn)(.)的區(qū)別,我們先來(lái)看一段簡(jiǎn)單的代碼:
local Animal ={}functionAnimal:Eat( food )print("Animal:Eat", self, food)end
functionAnimal.Sleep( time )print("Animal.Sleep", self, time)endAnimal:Eat("grass")
Animal.Eat("grass")
Animal:Sleep(1)
Animal.Sleep(1)
輸出結(jié)果為:
Animal:Eat table: 0x7f8421c07540 grass
Animal:Eat grassnilAnimal.Sleepniltable: 0x7f8421c07540
Animal.Sleepnil 1
由此可見(jiàn),
定義:
在Eat(冒號(hào)函數(shù))內(nèi)部有一個(gè)參數(shù)self,在Sleep(點(diǎn)函數(shù))內(nèi)部沒(méi)有參數(shù)self;
調(diào)用:
用冒號(hào)(:)調(diào)用函數(shù)時(shí),會(huì)默認(rèn)傳一個(gè)值(調(diào)用者自身)作為第一個(gè)參數(shù);
用點(diǎn)(.)調(diào)用函數(shù)時(shí),則沒(méi)有;
-- 如果要使結(jié)果一致,則:
Animal:Eat("grass")
Animal.Eat(Animal,"grass")
Animal:Sleep()
Animal.Sleep(Animal)
輸出結(jié)果:
Animal:Eat table: 0x7f8421c07540 grass
Animal:Eat table: 0x7f8421c07540 grass
Animal.Sleepniltable: 0x7f8421c07540
Animal.Sleepnil table: 0x7f8421c07540
-- 我們?yōu)槭裁纯梢杂?和:來(lái)定義函數(shù)
function Animal.Sleep( time ) end
-- 這種寫(xiě)法是一種語(yǔ)法糖(syntactic sugar),它的原型是:
Animal.Sleep = function ( time ) end
用雙冒號(hào)(:)時(shí),也是一種語(yǔ)法糖,實(shí)際上默認(rèn)傳遞一個(gè)self(Animal)參數(shù):
function Animal:Eat( food ) end
等價(jià)于
function Animal.Eat( self, food ) end
可參考Lua函數(shù)定義:
http://www.lua.org/manual/5.2/manual.html#pdf-next
3.4.10 –?Function Definitions
The syntax for function definition is
functiondef ::= function funcbody
funcbody ::= ‘(’ [parlist] ‘)’ block end
The following syntactic sugar simplifies function definitions:
stat ::= function funcname funcbody
stat ::= local function Name funcbody
funcname ::= Name {‘.’ Name} [‘:’ Name]
The statement
function f () body end
translates to
f = function () body end
The statement
function t.a.b.c.f () body end
translates to
t.a.b.c.f = function () body end
The statement
local function f () body end
translates to
local f; f = function () body end
not to
local f = function () body end
Lua 的詳細(xì)介紹:請(qǐng)點(diǎn)這里
Lua 的下載地址:請(qǐng)點(diǎn)這里
總結(jié)
以上是生活随笔為你收集整理的linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言basic解释器,要理解解释器,做
- 下一篇: linux 修改块大小,linux 查看