2015-07-25 2 views
0

Я пытаюсь сделать: function objects:add(namespace, x, y, w, h, mode, density, r) затем создайте новую таблицу. objects.namespace = {} затем возвращает таблицу: return objects.namespace , но я хочу, чтобы «пространство имен» на самом деле быть определены в функции ... как бы я идти о выполнении этого? и когда я пытаюсь вызвать что-то внутри таблицы IE: print(objects.newBox.x) это дает мне «NIL»Как добавить таблицы внутри функции в Lua

Даже если я стараюсь:

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 '[' 
+1

'объектов [имена] = {}' –

+0

Всякий раз, когда я пытаюсь '\t объектов [пространство имен] = {} \t объектов [пространство имен]. x = x' i получает ошибку: «index index is nil» в строке «objects [namespace] = {}» – MTadder

+1

Как вы называете 'objects: add'? – lhf

ответ

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 вы хотите индексировать t со значением имени, синтаксис t[name]
  • Вы также не используете возвращаемое значение, и вы можете получить от него t с t.box1. кажется ненужным
  • с использованием : предлагает вам реализовать объекты? Если это так, см PIL Object Oriented Programming для введения о том, как реализовать эти
+0

Большое вам спасибо за ответ и за полезную обратную связь и советы: D УДИВИТЕЛЬНЫЙ! – MTadder

Смежные вопросы