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.csdn.net/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遇到不连续的键的时候就会停止输出