我编写了一个lua函数 write_json ,它将lua表转换为json文本。 是否可以将函数与io库绑定,以便我可以像这样使用它:
mytable = {name="Jack", age="22", score=[12,33,55,66]}
f = io.open("score.json", "wb")
f:write_json(mytable) -- call my function here.
f:close()
答案 0 :(得分:3)
您需要访问文件对象的metatable的__index
表并将新方法放在那里:
local metatable = getmetatable( io.stdout )
local indextable = metatable.__index
indextable.write_json = function( file, tab )
-- ...
end
还有另一种方法:C API函数luaL_newmetatable
将文件对象的元表存储在密钥"FILE*"
下的注册表中,因此以下内容也可以工作(但需要调试库): / p>
local metatable = debug.getregistry()["FILE*"]
local indextable = metatable.__index
-- ...
还有另一种(更为hackish)方式:我测试的所有Lua版本(PUC-Rio Lua 5.1,5.2,5.3和LuaJIT)将metatable的__index
字段设置为metatable本身,所以你可以像这样进入__index
表:
local indextable = io.stdout.__index
最好的方法可能是第一种方式。
答案 1 :(得分:0)
io.open
返回的对象类型为userdata
,由于其独特的性质,我认为不能进行猴子修补。