4

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

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.xi 会出错。我需要提高对 Lua 函数的理解,但在手册中找不到。

4

2 回答 2

6

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

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”

于 2013-05-17T19:34:44.510 回答
3

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

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

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

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

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

于 2013-05-17T22:33:55.040 回答