2014-09-11 4 views
0

Я создаю объекты из класса, и эти объекты должны получить свое имя с помощью userinput. Так я получил мой конструктор и называют это нравится:Использовать содержимое переменной для объявления

name = object:new() 

конец все хорошо, когда я принимаю, что имя объекта является «имя». Но я хочу, чтобы объект был назван содержимым имени.

Так что:

name = "myObject" 
name = object:new() 
table.insert(objectlist, name) 

Заканчивается в этом:

objectlist = {name} 

Но я хочу, чтобы это закончилось в:

objectlist = {myObject} 

Как я могу это сделать? не должно быть, что трудно управлять, но я не получил никакого ключа = (

+2

Если 'name' является строкой' 'myObject" ', то' name: new() 'не компилируется. Вы должны создать минимальный, полный и проверенный пример. (Http://stackoverflow.com/help/mcve) –

+0

имя: new() означает имя = объект: новый() – Sempie

+0

Все еще не ясен. 'name' присваивается строке' 'myObject'', затем ** перезаписывается ** с помощью' object: new() ', как получить' myObject' в конце? Он исчез, с ветром. –

ответ

2

Объекты в Lua не имеют имен, а переменные представляют собой имена, которые относятся к объекту:

a = "asdfasf" 
b = a 

Что такое имя этой строки? Это не один, а переменная a относится к данному объекту строки, и так же переменная b. поэтому заявление

objectlist = {myObject} 

где myObject является пользователем выбранное имя для объекта, созданного new() не имеет смысла в Lua. Лучшее, что вы можете сделать, это создать глобальную переменную с заданным именем, ссылаясь на созданный объект или поместить созданный объект в ассоциативную таблицу.

Например,

name = "myObject" -- would be input by user via io.input() 
obj = object:new() 
objectlist[name] = obj -- allows for objectlist.myObject, if name is as above 
_G[name] = obj -- this allows following line to work, if name is as above 

Это позволяет сценарий написать:

myObject:someMethod() 
objectlist.myObject:someMethod() 

, но, конечно, это будет работать, только если пользователь выбрал «MyObject» в качестве значения name, так на практике вы, скорее всего, просто используете

local obj = objectlist[name] 
obj:someMethod() 

всякий раз, когда ваш сценарий должен использовать ob ject, созданный вашим пользователем.

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