Lua语法碎片

本文介绍了Lua编程语言中的几个实用技巧,包括如何获取table长度、使用闭包、进行切片操作、查找最大值以及理解pairs与ipairs的区别。通过具体代码示例展示了这些技巧的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、table的长度获得

用#来操作

2、lua中获取元素类型

print(type(label))
torch中的Tensor的type(a)和a:type()是等价的,但不意味着对于lua的数据类型这也是等价的

3、unpack

a = {1,2,3,4,5,6}
b = unpack(a)  --b=1
b,c,d,e = unpack(a)   --b =1,c=2,d=3,e=4
1+unpack(a)    -- 结果是2,只会和第一个元素相加
4、闭包

对于闭包的详细介绍,参考的是博客点击打开链接

对于闭包粗浅的理解

闭包 = 函数+upvalue

upvalue对应的是非局部变量,内部的嵌套函数可以去访问这一个非局部变量的值

在lua中函数是第一类值,和字符串数字 等是同等地位的,运行期被创建,而不是编译期间(代码来自博客http://blog.youkuaiyun.com/maximuszhou/article/details/44280109)

function f1(n)  
   --函数参数n也是局部变量  
   local function f2()  
      print(n)   --引用外部函数的局部变量  
   end  
   return f2  
end  
  
g1 = f1(2015)  
g1() -- 打印出2015  
  
g2 = f1(2016)  
g2() -- 打印出2016 
其中g1和g2就是闭包,他们由函数原型f2和对应的upvalue n组成,具体细节参考博客(链接已给)

5、切片操作

print(out[{1,{},{}}])
6、最大值

math.max(unpack(max_value_container))  #max value of table

7、pairs和ipairs的区别

Set = {}
Set.new = function (t)

    local set = {}
    for _, l in ipairs(t) do set[l] = true end

    return set
end
s2 = Set.new{1,10, 20, 30, 40, 50}
print(s2)                                         --输出键1,10,20,30,40,50
print(type(s2))                                   --table
for k, l in pairs(s2) do print(l) print(k) end    --true 1 true 20 true 10 true 30 true 40 true 50
for k, l in ipairs(s2) do print(l) print(k) end   --true 1
pairs回依次输出键和对应的键值,ipairs遇到不连续的键的时候就会停止输出





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值