Lua表的工作原理
我开始从Lua编程学习Lua(第二版) 我不明白书中的下列内容。解释得很模糊 a、 )Lua表的工作原理,lua,Lua,我开始从Lua编程学习Lua(第二版) 我不明白书中的下列内容。解释得很模糊 a、 )w={x=0,y=0,label=“console”} b、 )x={math.sin(0)、math.sin(1)、math.sin(2)} c、 )w[1]=“另一个字段” d、 )x.f=w e、 )打印(w[“x”]) f、 )print(w[1]) g、 )打印x.f[1] 当我在a之后打印(w[1])时,为什么它不打印x=0 c.)做什么 e.)和打印(w.x)之间有什么区别 b.)和g.)的作用是
w={x=0,y=0,label=“console”}
b、 )x={math.sin(0)、math.sin(1)、math.sin(2)}
c、 )w[1]=“另一个字段”
d、 )x.f=w
e、 )打印(w[“x”])
f、 )print(w[1])
g、 )打印x.f[1]
当我在a之后打印(w[1])时,为什么它不打印x=0
c.)做什么
e.)和打印(w.x)
之间有什么区别
b.)和g.)的作用是什么?你必须意识到:
t = {3, 4, "eggplant"}
与此相同:
t = {}
t[1] = 3
t[2] = 4
t[3] = "eggplant"
t = {}
t["x"] = 0
t["y"] = 2
而且:
t = {x = 0, y = 2}
与此相同:
t = {}
t[1] = 3
t[2] = 4
t[3] = "eggplant"
t = {}
t["x"] = 0
t["y"] = 2
或者这个:
t = {}
t.x = 0
t.y = 2
在Lua中,表不仅仅是列表,它们也是
当您打印w[1]
时,真正重要的是第c行。)事实上,w[1]
在第c行之前根本没有定义
e.)和打印(w.x)
之间没有区别
b、 )创建名为x
的新表,该表与w
分开
d、 )在x
的内部放置对w
的引用。(注意:它实际上不是w
的副本,只是一个。如果您曾经使用过指针,它是类似的。)
g、 )可分为两部分。首先,我们得到
x.f
,这只是引用w
的另一种方式,因为第d行)。然后我们查找该表的第一个元素,它是“另一个字段”
,因为第c行。)有另一种方法在内嵌表声明中创建键
x = {["1st key has spaces!"] = 1}
这里的优点是,您可以使用带有空格和任何扩展ASCII字符的键。
事实上,关键点可以是任何东西,甚至是一个实例对象
function Example()
--example function
end
x = {[Example] = "A function."}
任何变量、值或数据都可以放在方括号中用作键。价值也是如此。
实际上,这可以替代python中的关键字中的,因为您可以通过值对表进行索引以检查它们是否存在
在表的未定义部分获取值不会导致错误。它只会给你零分。使用未定义的变量也是如此。非常感谢您的解释。这真的帮助我理解了。不过,我有一个简短的问题。。当我这样做时,x.f=w意味着我有类似x={f=w}的东西,我正试图打印x.f。因为f=w和w={“另一个字段”,x=0,y=0,label=“console”},所以x={f={“另一个字段”,x=0,y=0,label=“console”}。我做得对吗?如果是,是否应该打印(x.f.标签)并将控制台作为输出?是的,这完全正确。请记住,x.f
实际上指的是与w
相同的物理RAM,因此如果您修改x.f
中的值,修改将显示在w
中。但是,如果将x.f
替换为另一个值(例如不同的表),w
将不再受影响。顺便说一句,没有打印语句,只有打印功能。