使用变量内容进行声明。

我正在从一个类创建对象,这些对象应该通过用户输入获得它们的名称。因此,我有了我的构造函数,并像这样调用它:

name = object:new()

一切都很好,当我接受对象名称为“name”时。但是我希望对象的名称由名称的内容命名。

因此,下面的代码:

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

最终会得到这个:

objectlist = {name}

但我希望它以这个结束:

objectlist = {myObject}

我该怎么办? 这应该不难处理,但我不知道怎么做。

点赞
用户869951
用户869951

Lua 中的对象没有名称;相反,变量表示引用对象的名称:

a = "asdfasf"
b = a

那个字符串的名字是什么?它没有名字,但变量 a 引用给定的字符串对象,变量 b 也是如此。 因此,语句

objectlist = {myObject}

其中 myObject 是用户选择的通过 new() 创建的对象的名称,不在 Lua 中意义明确。您可以创建一个具有给定名称的全局变量,引用创建的对象,或将创建的对象置于关联表中。

例如,

name = "myObject" --用户通过 io.input() 输入
obj = object:new()
objectlist[name] = obj --如果名称如上,则允许使用 objectlist.myObject
_G[name] = obj --如果名称如上,则可以使用以下行

这允许您的脚本编写:

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

但是,当然仅当用户选择“myObject”作为 name 的值时才有效,因此在实践中,您可能只会使用

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

每当您的脚本应该使用您的用户创建的对象时。

2014-09-11 15:57:02