Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Lua 关于table.insert的问题_Lua - Fatal编程技术网

Lua 关于table.insert的问题

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

我在理解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 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将一个函数值作为其第二个参数,期望函数将比较其表中指定的两个参数值。