如何在Lua函数内添加表格

我正在尝试做以下事情:

function objects:add(namespace, x, y, w, h, mode, density, r)

然后创建一个新的表。 objects.namespace = {} 然后通过以下方式返回表格:

return objects.namespace

但是我想要将“namespace” 实际定义在函数中...我应该如何做?

当我尝试调用表格中的某些内容时,例如:print(objects.newBox.x),它会给我“NIL”。

即使我尝试:

function test(name)
  print(name)
  [name] = {"yo"}
end
test(doit)

它会给我一个错误:“尝试对空值进行索引”。

我可能做错了什么...

``` table = {} function table:add(name, x, y) table.[name] = {} table.[name].x = x table.[name].y = y

return table.[name] end table:add(box1, 300, 100) print("table.box1.x: " ..table.box1.x) print("table.box1.y: " ..table.box1.y)

-- [name] 应该在函数参数中定义。 -- 然后我想将返回表并将其内容用于其他用途(例如第10和11行) -- 得到以下错误:“期望 '' 在 ' [' 附近”

点赞
用户2726734
用户2726734

这是一个可行版本:

t = {}
function t:add(name, x, y)
  t[name] = {} -- 或使用 t[name] = {x=x, y=y} 并移除下面的两行
  t[name].x = x
  t[name].y = y
  return t[name] -- 必要吗?
end

t:add('box1', 300, 100)

print("t.box1.x: " ..t.box1.x)
print("t.box1.y: " ..t.box1.y)
  • 将变量命名为“table”会隐藏表库,因此我将其更改为“t”
  • 当你调用t:add(box1, 300, 100)时,因为box1未定义,所以其值为nil,这不是一个有效的表键。
  • 你想使用“box1”作为键,因为t.box1仅是t [“box1”]的语法糖。
  • 在你的函数t:add中,你想要用name的值索引t,语法为t[name]
  • 你还没有使用返回值,可以使用t.box1t中获取它,似乎没有必要
  • 使用: 建议你想要实现对象?如果是这种情况,可以参考PIL面向对象编程介绍如何实现。
2015-07-25 17:08:32