Function Lua-多个对象、链接值?
我最近查阅了一个简单LuaOOP原则的示例,并对其进行了轻微修改,如下所示 我发现难以理解的是elf.name和hobbit.name之间的联系。为什么当我改变其中一个的值时,它会影响另一个?我知道我可以在函数内部将elf.name设置为local,但它不会有相同的效果 相反,更改另一个.name的值对其他两个没有影响。elf.name和hobbit.name之间有持久的联系吗?我以为它们被当作单独的物体 谢谢 )^ 扎洛金 结果:-Function Lua-多个对象、链接值?,function,oop,lua,Function,Oop,Lua,我最近查阅了一个简单LuaOOP原则的示例,并对其进行了轻微修改,如下所示 我发现难以理解的是elf.name和hobbit.name之间的联系。为什么当我改变其中一个的值时,它会影响另一个?我知道我可以在函数内部将elf.name设置为local,但它不会有相同的效果 相反,更改另一个.name的值对其他两个没有影响。elf.name和hobbit.name之间有持久的联系吗?我以为它们被当作单独的物体 谢谢 )^ 扎洛金 结果:- >>>>elf.name set t
>>>>elf.name set to Frodo
>>>>hobbit.name - Frodo
>>>>elf.name - Frodo
>>>>
>>>>hobbit.name set to Charlie
>>>>hobbit.name - Charlie
>>>>elf.name - Charlie
>>>>
>>>>hobbit.name set to Charlie and another.name set to Gary
>>>>hobbit.name - Charlie
>>>>elf.name - Charlie
>>>>another.name - Gary
这就是你的错误所在。我相信lua是被推荐的。这样,你的代码就不起作用了。此外,霍比特人不应该是Elf的实例——如果Lua是通过引用传递的,那么实例自然会共享数据。此外,在顶端精灵的名字是佛罗多。我建议您删除它。你所需要做的就是像对待另一个物体那样做
编辑:Lua是按引用传递的,但仅在表和对象上。
引用Lua 5.1参考手册:
Lua中有八种基本类型:nil、boolean、number、string、,
函数、用户数据、线程和表
表、函数、线程和完整的userdata值都是对象:变量实际上并不包含这些值,只是
对它们的引用。赋值、参数传递和函数
返回总是操纵对这些值的引用;这些行动
不要暗示任何形式的复制
{}的任何用法都称为表构造函数。它创建了一个全新的表。当您执行elf.name=Frodo时,您正在修改elf指向的表。在代码中,elf和另一个单独初始化。另一方面,霍比特人间接地被赋予了elf。换句话说,elf和hobbit是对同一个表的引用。No,两个变量可以共享同一个对象。Lua永远不会通过引用传递:如果我有函数fx={}end,我调用fy,这将永远不会导致我的变量y设置为{}。Lua总是按值传递,但传递的值有时是引用。
>>>>elf.name set to Frodo
>>>>hobbit.name - Frodo
>>>>elf.name - Frodo
>>>>
>>>>hobbit.name set to Charlie
>>>>hobbit.name - Charlie
>>>>elf.name - Charlie
>>>>
>>>>hobbit.name set to Charlie and another.name set to Gary
>>>>hobbit.name - Charlie
>>>>elf.name - Charlie
>>>>another.name - Gary
function Character()
return elf
end
local hobbit = Character()