我和Lua有些麻烦。问题是:有一些Lua代码我知道他们做了什么,但我没有理解它们,所以如果教授要我解释它们,我就无法做到。 你能帮我解决这个问题吗?
我知道这段代码将整数部分与数字的小数部分分开,但我不理解"(%d*)(%.?.*)$"
部分。
int, dec = string.match(tostring(value), "(%d*)(%.?.*)$")
此代码在表格中插入文本文件中的所有数据,该文件是在此模型entry {name = "John", age = 20, sex = "Male")
之后编写的。我不明白的是我怎么知道功能负载需要什么参数?最后一个参数entry = entry
,我不知道我是否确切地知道它的含义:我认为它将text_from_file
作为Lua代码的一部分,并且在输入之后的所有内容都被发送到function entry
,将其插入表格,是吗?
function entry(entrydata)
table.insert(data, entrydata)
end
thunk = load(text_from_file, nil, nil, {entry = entry})
thunk()
那就是它。如果可能的话,请帮助我理解这2段Lua代码,我需要提供整个程序,如果教授问我代码,我想确定一切。
答案 0 :(得分:2)
对于第一个问题,您需要了解lua patterns和string.match
。
模式(%d*)(%.?.*)$
由两个较小的模式组成。 %d*
和%.?.*
。最后的$
仅表示匹配将在字符串tostring(value)
结束之前完成。 %d*
将匹配 0或更多 数值,并将结果(如果找到,否则为零)存储为变量int
。
%.?
匹配文字.
字符。 ?
表示.
可能存在也可能不存在。 .*
匹配所有内容并将其存储到dec
变量中。
同样,对于第二个代码段,请查看load()
参考。您的文件中包含以下文本:
entry {name = "John", age = 20, sex = "Male")
这相当于使用参数(注意我使用参数而不是参数)执行名为entry
的函数表,如下所示:
entry( {name = "John", age = 20, sex = "Male") )
load
的最后一个参数定义了加载字符串的环境。通过传递{entry = entry}
,您将定义一个具有名为entry
的函数的环境。要更好地理解它,请查看以下部分中的更改:
function myOwnFunctionName(entrydata)
table.insert(data, entrydata)
end
thunk = load(text_from_file, nil, nil, {entry = myOwnFunctionName})
现在,传递给load
的自定义环境将有一个名为entry
的变量,实际上是myOwnFunctionName
函数。