尝试理解Lua的简单代码。

我在使用 Lua 时遇到了一些问题。现在有一些 Lua 代码,我知道它们的作用,但我不理解它们。如果教授要求我解释它们,我就不能做到。你能帮我吗?

  1. 我知道这段代码可以将一个数字分成整数部分和小数部分,但我不理解 "(%d*)(%.?.*)$" 这一部分。

    int, dec = string.match(tostring(value), "(%d*)(%.?.*)$")
    
  2. 这段代码可以将文本文件中符合模板 entry {name = "John", age = 20, sex = "Male") 的所有数据插入到一个表格中。我不理解的是,我怎么知道load函数需要哪些参数?最后一个参数 entry = entry,我不确定它的确切含义:我想它会将 text_from_file 作为 Lua 代码的一部分,而在 entry 后面所有的东西都会被传送到entry 函数,然后被插入到一个表格中,这样对吗?

    function entry(entrydata)
        table.insert(data, entrydata)
    end
    
    thunk = load(text_from_file, nil, nil, {entry = entry})
    thunk()
    

以上是我的问题,请帮助我理解这两个 Lua 代码片段,因为我需要展示整个程序的工作过程,如果教授问我关于这段代码的问题,我希望能确定所有细节。

点赞
用户1190388
用户1190388

第一个问题,你需要学习一些 Lua 模式string.match

模式 (%d*)(%.?.*)$ 由两个小模式组成。 %d*%.?.*。末尾的 $ 表示匹配将进行到字符串 tostring(value) 的结尾。 %d* 匹配零个或多个 数字值,并将结果(如果找到,否则为nil)存储在变量 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

2014-05-27 02:47:27