试图了解Lua简单代码

时间:2014-05-27 00:58:04

标签: lua lua-table lua-patterns

我和Lua有些麻烦。问题是:有一些Lua代码我知道他们做了什么,但我没有理解它们,所以如果教授要我解释它们,我就无法做到。 你能帮我解决这个问题吗?

  1. 我知道这段代码将整数部分与数字的小数部分分开,但我不理解"(%d*)(%.?.*)$"部分。

    int, dec = string.match(tostring(value), "(%d*)(%.?.*)$")
    
  2. 此代码在表格中插入文本文件中的所有数据,该文件是在此模型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()
    
  3. 那就是它。如果可能的话,请帮助我理解这2段Lua代码,我需要提供整个程序,如果教授问我代码,我想确定一切。

1 个答案:

答案 0 :(得分:2)

对于第一个问题,您需要了解lua patternsstring.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函数。

相关问题