Lua中的函数

3

我正在学习《Lua编程(第二版)》,书中有一些内容我没有理解。

network = {
          {name ="grauna", IP="210.26.30.34"},
          {name ="araial", IP="210.26.30.23"},
}

如果我们想按字段名称对表进行排序,作者提到:
table.sort(network, function (a,b) return (a.name > b.name) end }

这里发生了什么?函数(a,b)代表什么?函数是关键字还是其他东西?
如果您正在玩耍并创建一个订单表格。
 order={x=1,x=22,x=10} // not sure this is legal

然后执行了。
 print (table.sort(order,function(a,b) return (a.x > b.x) end))

我没有得到任何输出,我错在哪里了?

谢谢

4个回答

8

这是一个匿名函数,它接受两个参数并在第一个参数小于第二个参数时返回truetable.sort()对需要排序的每个元素运行此函数,并将每个元素与前一个元素进行比较。


我理解了逻辑。我的问题是为什么我们要用 function(a,b) 这样的形式,function 是一个关键字吗? - Ank
@Ankur,是的,它是一个关键字。它定义了一个函数。如果您将其用作function name(),它将定义一个命名函数。如果您只使用function(),它将定义一个匿名函数。请参阅语言手册中的section 2.5.9 - rid
好的,谢谢。有点明白了。第二部分的问题出了什么问题?为什么我没有得到任何输出? - Ank
2
@Ankur,如果你想定义一个表格的表格,请使用 order={{x=1},{x=22},{x=10}}order={x=1,x=22,x=10} 将一遍又一遍地设置 x 键,并最终得到一个只有一个键为 x 值为 10 的表格。 - rid

4

我认为(但不确定)在Lua中,order={x=1,x=22,x=10}order={x=10}具有相同的含义,即一个表格只有一个"x"与值10相关联。也许你的意思是{{x=1},{x=22},{x=10}},以创建一个由3个组件组成的"数组",每个组件都有键"x"


3

回答你问题的第二部分:Lua非常小,不提供直接打印表格的方法。如果您将表格用作列表或数组,则可以执行以下操作:

print(unpack(some_table))

unpack({1, 2, 3}) 返回 1, 2, 3。这是非常有用的函数。


2

function 在 Lua 中是一个关键字,类似于 Scheme 或 Common Lisp(也包括 Python)中的 lambda,或者在 Ocaml 中的 fun,用于引入带有闭合变量的匿名函数,即闭包


谢谢,很有道理。那么为什么第二部分的问题没有起作用呢? - Ank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接