【问题标题】:Lua functions -- a simple misunderstandingLua函数——一个简单的误解
【发布时间】:2013-05-13 01:23:11
【问题描述】:

我正在尝试开发一个对具有相同键的两个值执行数学运算的函数:

property = {a=120, b=50, c=85}
operator = {has = {a, b}, coefficient = {a = 0.45}}
function Result(x) return operator.has.x * operator.coefficient.x end
print (Result(a))
error: attempt to perform arithmetic on field 'x' (a nil value)

问题是该函数在字面上尝试数学 “operator.has.x”而不是“operator.has.a”。

我可以调用函数 (x) 返回 x.something end,但如果我尝试函数 (x) something.x,我会收到错误消息。我需要提高对 Lua 函数的理解,但在手册中找不到。

【问题讨论】:

    标签: function lua lua-table


    【解决方案1】:

    我不确定您要做什么,但这里有一些基于您的代码的工作代码:

    property = {a=120, b=50, c=85}
    operator = {has = {a=2, b=3}, coefficient = {a = 0.45}}
    function Result(x) return operator.has[x] * operator.coefficient[x] end
    print (Result('a'))
    

    打印“0.9”

    【讨论】:

    • 这正是我想要做的!非常感谢。
    • 酷,很高兴有帮助!
    【解决方案2】:

    这是该语言新手的常见问题。埋在Lua手册somewhere

    为了表示记录,Lua 使用字段名作为索引。这 语言通过提供 a.name 作为句法来支持这种表示 ["name"] 的糖。

    这解释了您的function Result(x) 失败的原因。如果你翻译语法糖,你的函数变成:

    function Result(x) 
      return operator.has['x'] * operator.coefficient['x']
    end
    

    Geary 已经为此提供了解决方案,所以我不会在此重复。

    【讨论】:

    • 啊,这很有道理。在我了解表的工作原理之前,我可能应该避免使用任何替代符号。
    猜你喜欢
    • 2019-01-12
    • 2014-07-31
    • 2014-07-17
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2016-04-13
    相关资源
    最近更新 更多