【问题标题】:Trying to understand Lua simple codes试图理解 Lua 简单代码
【发布时间】:2014-07-15 18:52:38
【问题描述】:

我在使用 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()
    

就是这样。如果可能,请帮助我理解这 2 段 Lua 代码,我需要展示整个程序的运行情况,如果教授问我关于代码的问题,我想确定一切。

【问题讨论】:

    标签: lua lua-table lua-patterns


    【解决方案1】:

    对于第一个问题,你需要了解一下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

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多