我想做:
function objects:add(namespace, x, y, w, h, mode, density, r)
然后制作一张新桌子。 objects.namespace = {}
然后返回表格:
return objects.namespace
但我想要'命名空间'在功能中定义实际 ...我将如何做到这一点?
当我试着在桌子里面打电话的时候.E: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] is to be defined in the function arg.
-- then i want to return the table and use it's contents for other uses I.E line 10 and 11
-- gets the following error: '<name>' expected near '['
答案 0 :(得分:1)
这是一个工作版本:
t = {}
function t:add(name, x, y)
t[name] = {} -- or use t[name] = {x=x, y=y} and remove the next 2 lines
t[name].x = x
t[name].y = y
return t[name] -- necessary?
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
从t.box1
转到该值。似乎没必要:
建议你想要实现对象?如果是这种情况,请参阅PIL Object Oriented Programming以获取有关如何实施该