我试图复制文件对象的某些方法,因为我需要使用小写的大小写方法测试Lua API代码。所以我尝试了这个:
function openFile(n, m)
local f = io.open(n, m)
if(not f) then
return status(nil,"openFile: Nofile: "..tostring(n))
end
f.Read = f.read
f.Write = f.write
f.Close = f.close
f.Flush = f.flush
return f
end
考虑到文件对象有
file:read
,file:write
...又名
但是给我一个如下错误:
Execution error:
.\ZeroBraineProjects/dvdlualib/fileapi.lua:41: attempt to index local 'f' (a userdata value)
我认为文件是简单的对象表。事实证明它是一个userdata对象。
那么我们如何使用大写案例方法进行阅读和写作?
答案 0 :(得分:3)
您必须在f
的metatable中设置这些字段:
local m = getmetatable(f)
m.Read = m.read
m.Write = m.write
m.Close = m.close
m.Flush = m.flush