Lapis框架的基本库模板
作者:糖果
MoonScript库模板代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| local *
configs = {}
config = (env, fn) -> print(env, fn) return 1
setmetatable { :config }, { __call:(...) => config ...
|
Lua库模板代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| local configs, config configs = { } config = function(env, fn) return 1 end return setmetatable({ config = config }, { __call = function(self, ...) return config(...) end })
|
MoonScript如何引用库
1 2 3 4 5 6 7 8 9 10 11 12
| 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如何引用库
1 2 3 4 5 6 7 8 9 10 11
| 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')
|
返回结果
1 2 3 4 5 6
| table config function: 0x11204b0 pa pb pa pb pa pb table: 0x10005c0 pa
|
注意一下“.”、“:”这两种调用的区别,“:”调用时会将自己作为第一个参数传给被
调用函数第一个形参。
上文提到的例子还是把函数作为元素包在table变量返回,而MoonScript本身是支持类的,所
以直接用class形式声明的库。
MoonScript类库模板代码:
1 2 3
| class log @output: => print("log")
|
Lua类库模板代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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
|
调用库
1 2 3 4 5
| log = require "1lib" print(type(log)) for k,v in pairs(log) print(k,v) log\output()
|
调用结果
1 2 3 4 5 6
| 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/