Lua 关于table.insert的问题
我在理解Lua中的table.insert时遇到问题。 参考WRA编程手册第129页Lua 关于table.insert的问题,lua,Lua,我在理解Lua中的table.insert时遇到问题。 参考WRA编程手册第129页 --A demonstration of sorting an associative table. NameToInstr = {John = “rhythm guitar”, Paul = “bass guitar”, George = “lead guitar”, Ringo = “drumkit”} --Transfer the associative table NameToInstr
--A demonstration of sorting an associative table.
NameToInstr = {John = “rhythm guitar”,
Paul = “bass guitar”,
George = “lead guitar”,
Ringo = “drumkit”}
--Transfer the associative table NameToInstr to the
--array Sorted:
Sorted = {}
for Name, Instr in pairs(NameToInstr) do
table.insert(Sorted, {Name = Name, Instr = Instr})
end
--The comparison function sorts by Name:
table.sort(Sorted, function(A, B) return A.Name < B.Name end)
--Output:
for _, NameInstr in ipairs(Sorted) do
print(NameInstr.Name .. “ played “ .. NameInstr.Instr)
end
我的问题是
为什么我们需要进行Name=Name和Instr=Instr赋值?
为什么这些赋值需要放在那些表构造函数中?
在-中,比较函数按名称排序:,函数A、B是如何工作的,因为A和B以前没有分配给任何值
非常感谢。对不起,我的英语很差。用于类似数组的表;也就是说,表的键从1到n。它在指定的整数索引处插入一个值,并向下移动数组的其余部分
local t = {1, 2, 3}
table.insert(t, 2, "foo") -- t = {1, "foo", 2, 3}
table.insert(t, "bar") -- t = {1, "foo", 2, 3, "bar"}
在您的示例中,代码正在创建一个表数组,其中每个表都有一个名称和一个Instr字段。插入只是将每个数组项追加到数组的末尾
为什么我们需要进行Name=Name和Instr=Instr赋值
答:赋值左边的部分是字段名,右边的部分是要关联的值。语句t={a=123,b=var}将t中的字段a与值123关联,并将该表中的字段b与名为var的变量的值关联,除非var本身是一个表,否则b与var标识的表的引用关联,但这是一个与您的问题没有直接关系的单独问题。因此,在您的例子中,开发人员将键设置为与for循环变量同名
为什么这些赋值需要放在那些表构造函数中
答:不知道你所说的表构造函数是什么意思,你在哪里看到的
在-中,比较函数按名称排序:,函数A、B是如何工作的,因为A和B以前没有分配给任何值
答:排序时,sort函数会多次调用匿名函数,每次都有两个值,一个用于A,一个用于B,期望返回值指示给定对的A是否小于B
关于表构造函数,我指的是环绕Name=Name和Instr=Instr@Boodewend是一个函数定义,很像一个表构造函数。每次执行时,都会创建一个函数值。A和B是形式参数。table.sort将一个函数值作为其第二个参数,期望函数将比较其表中指定的两个参数值。