我正在从类创建对象,这些对象应通过userinput获取其名称。 所以我得到了我的构造函数并称之为:
name = object:new()
结束一切都很好,当我接受对象名称为" name"。 但我希望通过名称的内容来命名对象。
所以这个:
name = "myObject"
name = object:new()
table.insert(objectlist, name)
结束于此:
objectlist = {name}
但我希望它以:
结束objectlist = {myObject}
我该怎么做? 难道不难管理,但我没有任何线索=(
答案 0 :(得分: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()
每当您的脚本应该使用您的用户创建的对象时。