Function Lua如何创建可用于变量的自定义函数?
对于io.close()等方法,您可以这样使用它:Function Lua如何创建可用于变量的自定义函数?,function,variables,lua,Function,Variables,Lua,对于io.close()等方法,您可以这样使用它: file:close() lines:readArgs(1) 有没有一种方法可以创建一个这样工作的自定义函数,您可以在变量上调用它 对我来说,我试图使用string.find来查找空格,从而将参数与文本文件分开 所以在文本文件中 this is some input 并且readArgs()函数在一行上被调用后,应返回表中args[1]=“So”、args[2]=“in”、args[3]=“the”等的整行 function readFi
file:close()
lines:readArgs(1)
有没有一种方法可以创建一个这样工作的自定义函数,您可以在变量上调用它
对我来说,我试图使用string.find来查找空格,从而将参数与文本文件分开
所以在文本文件中
this is some input
并且readArgs()函数在一行上被调用后,应返回表中args[1]=“So”、args[2]=“in”、args[3]=“the”等的整行
function readFile(file)
local lines = {}
assert(io.open(file), "Invalid or missing file")
local f = io.open(file)
for line in f:lines() do
lines[#lines+1] = line
end
return lines
end
function readArgs(line) -- This is the function. Preferably call it on the string line
--Some code here
end
根据您的描述,听起来您在追求类似于以下语法的东西:
local lines = readFile(file)
lines:readArgs(1) -- parse first line {"this", "is", "some", "input"}
元表可以帮助实现这一点:
local mt = { __index = {} }
function mt.__index.readArgs(self, linenum)
if not self[linenum] then return nil end
local args = {}
for each in self[linenum]:gmatch "[^ ]+" do
table.insert(args, each)
end
return args
end
您必须在读取文件中稍作更改,并将该元表附加到要返回的行中:
function readFile(file)
-- ...
return setmetatable(lines, mt)
end
编辑:要回答OP的评论,请拨打以下电话:
file:close()
lines:readArgs(1)
只是语法糖:
lines.readArgs(lines, 1)
当lua VM执行上述行时,会发生以下情况:
- 表
行
是否有readArgs
键
- 如果是,则对语句的其余部分使用其相应的值
- 如果否,
行
是否有元表。\u索引?在本例中是这样的,因此使用分配给\u index.readArgs
的函数
readArgs
现在使用上面的参数调用:self
=lines,linenum
=1
这里的self
没有什么特别之处,它只是一个常规参数;你可以给它起任何你想要的名字。所以,为了澄清,你要做的是能够调用someStringVariable:readArgs()
?是的。可能会调用string:readArgs()之类的函数,然后让它返回一个参数表或一些术语:函数将值作为参数;不是变量。:
的LHS是一个表达式。这里使用的self参数代表什么?桌子被叫来了?我测试了您用我的语法提供的代码,它工作得很好,但我希望能够更好地理解这段代码,我已经添加了一些解释。看看这是否有帮助。为了澄清,因为Lua找不到行[“readArgs”],所以它在元表中查找了uu索引[“readArgs”]?正确,如果您在不存在的表中查询键,Lua将作为回退查询元表。如果没有与该表关联的元表,那么您只需要像往常一样得到nil
。