Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Lua-多个对象、链接值?_Function_Oop_Lua - Fatal编程技术网

Function Lua-多个对象、链接值?

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

我最近查阅了一个简单LuaOOP原则的示例,并对其进行了轻微修改,如下所示

我发现难以理解的是elf.name和hobbit.name之间的联系。为什么当我改变其中一个的值时,它会影响另一个?我知道我可以在函数内部将elf.name设置为local,但它不会有相同的效果

相反,更改另一个.name的值对其他两个没有影响。elf.name和hobbit.name之间有持久的联系吗?我以为它们被当作单独的物体

谢谢

)^ 扎洛金

结果:-

>>>>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()