2016年1月27日 星期三

Lua: 撰寫函式庫

在Lua中要寫一個library給別人使用可以依以下寫下法處理

在my_module.lua中程式為:
local myMod = {}

function myMod.add(a, b)
    return (a+b)
end

function myMod.dot(a, b)
    return (a*b)
end

return myMod

在主程式中則可以這樣引用
local myMod = require("my_module")

print(myMod.add(10, 20))
print(myMod.dot(3, 5))
print(myMod.add(2, myMod.dot(3, 4)))

require()用來把需要的library引入

若想要寫成像物件那樣好像也可以使用module的方式處理…現在還沒讀到,晚點再介紹這部份

另外,還可以幫模組(或是說變數)動態增加function
local myMod = require("my_module")

function myMod.print(a, b)
    print("value=", a, b)
end

function myMod:print2(a, b, c)
    print("value2=", a, b, c)
end


print(myMod.add(10, 20))
print(myMod.dot(3, 5))
print(myMod.add(2, myMod.dot(3, 4)))

myMod.print(11, 22)
myMod.print2(111, 222, 333, 444)
--[[結果為
30
15
14
value= 11 22
value2= 222 333 444
]]

這邊還不是很懂「.」和「:」的差異…
由網路查來的說法是
function myMod:print2(a, b, c)
等同於  function myMod.print(self, a, b, c)
多了一個把自己當成引數
因此把第二個function改為
function myMod:print2(a, b, c)
    print("value2=", a, b, c)
    print('type=', self)
end

myMod.print(111, 222, 333, 444)
則會印出
value2= 222 333 444
type= 111




沒有留言:

張貼留言