无名商城论坛

搜索
查看: 449|回复: 0

[其他技术] lua第十六课第一类值

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-4-15 02:32:47 | 显示全部楼层 |阅读模式
嗯,我的另一半其实在小破站开通了视频
所以我一直没去发帖子
这里重新写一下帖子,来为他拉一点粉丝

今天讲16课
函数是第一类值!!
看着很高大上
我用几个例子说明

①自己动手实践哦
a={p=print}
a.p("hello lua")
--这里p是a表的一个名与键用法类似,但要区分

②接着用例子①a表延伸
print=math.sin
a.p(print(1))
③反转过来
math.sin=a.p
math.sin(10,20)

第一类值(看理论,看不懂跳过)
意味着lua语言中的函数与其他常见类型的值(例如数值与字符串)具有同等权限
一个程序可以将某个函数保存到变量中(全局或者局部变量)或表中,也可以将某个函数作为参数传递给其他函数,还可以将某个函数作为其他函数的返回值返回

如果函数也是值的话,是可以创建函数的表达式的
举个常见的例子

function aaa(x) return 2*x end
--这个是个语法糖,让你方便理解的
以上等价于
aaa=function(x) return 2*x end
而像这种function(x) body end就是函数构造器,跟表{}构造器相似,你也可以理解为
函数定义实际上就是创建类型为"function"的值,把它赋值给一个变量的语句
注意!!!
所有函数是匿名的,像其他所有值一样,函数没名字。
在讨论函数时,像初学的print,实际指的是保存该函数的变量
我们通常把函数给全局变量,看似给函数起了个名字
很多场景下函数仍然会保持匿名性

举个例子
new = {
{name="lua", IP = "210.26.23.12"},
{name="arraial", IP = "210.26.30.23"},
{name="grauna", IP = "210.26.30.34"},
{name="derain", IP = "210.26.23.20"},
}
table.sort(new,function(a,b)
return(a.name > b.name) end)

表函数sort第一个参数是一个表(例子中的new)
第二个参数则是进行各种排序(例子中的是一个按name字母顺序)
sort并没试图穷尽所有排序,所以提供了可选的一个参数
好了,不懂去小破站视频下面问我
你直接去搜lua第二课闭包,应该可以搜到
我只是拉点流量
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表