Lapis框架的基本库模板
作者:糖果
MoonScript库模板代码:
local *
configs = {}
config = (env, fn) ->
print(env, fn)
return 1
setmetatable {
:config
}, {
__call:(...) => config ...
Lua库模板代码:
local configs, config
configs = { }
config = function(env, fn)
return 1
end
return setmetatable({
config = config
}, {
__call = function(self, ...)
return config(...)
end
})
MoonScript如何引用库
config = require "lib"
print(type(config))
for k,v in pairs(config)
print(k,v)
config('pa', 'pb')
config:config('pa', 'pb')
config.config('pa', 'pb')
config\config('pa', 'pb')
Lua如何引用库
local config = require("lib")
print(type(config))
for k, v in pairs(config) do
print(k, v)
end
config('pa', 'pb')
local _ = {
config = config('pa', 'pb')
}
config.config('pa', 'pb')
return config:config('pa', 'pb')
返回结果
table
config function: 0x11204b0
pa pb
pa pb
pa pb
table: 0x10005c0 pa
注意一下“.”、“:”这两种调用的区别,“:”调用时会将自己作为第一个参数传给被
调用函数第一个形参。
上文提到的例子还是把函数作为元素包在table变量返回,而MoonScript本身是支持类的,所
以直接用class形式声明的库。
MoonScript类库模板代码:
class log
@output: =>
print("log")
Lua类库模板代码:
local log
do
local _class_0
local _base_0 = {
output = function(self)
return print("log")
end
}
_base_0.__index = _base_0
_class_0 = setmetatable({
__init = function() end,
__base = _base_0,
__name = "log"
}, {
__index = _base_0,
__call = function(cls, ...)
local _self_0 = setmetatable({}, _base_0)
cls.__init(_self_0, ...)
return _self_0
end
})
_base_0.__class = _class_0
log = _class_0
return _class_0
end
调用库
log = require "1lib"
print(type(log))
for k,v in pairs(log)
print(k,v)
log\output()
调用结果
table
__name log
__init function: 0x110a250
output function: 0x110a0a0
__base table: 0x10aa5b0
log
有了class关键字后,后发现require返回的变量依然是table,但多了几个变量,__name,
__init初始化函数,__base基类表,自定义函数output。
对于没有继承关系库用table方式封装库直接,需要类依赖的库用class相对方便一些,不过最终
一切类都是table转化形式。
本文请不要用于商业目地,非商业转载请署名原作者与原文链接。
https://www.moonscript.cn/lapis%E6%A1%86%E6%9E%B6/lapis-lib/