Lua unpack函数用法
unpack,接受一个table做个参数,然后按照下标返回数组的所有元素
unpack
lua 版本 <= 5.1
local t = {nil , 3}
retunrn unpack(t) // nil , 3
table.unpack
lua 版本 > 5.1
local t = {nil, 3}
return table.unpack(t) // nil, 3
关于不定数量参数的处理
5.1版本及以前可直接处理
local function fun1(...)
print(unpack(arg))
end
fun1(1,nil,3) //1,nil,3
5.2版本以后需要手动转化
local function fun2(...)
local arg = { ... }
print(table.unpack(arg))
end
fun2(1,nil,3) //1,nil,3
table.length问题
有一个很有意思的问题
如果参数是{nil, 2, nil}, 就无法正常打印出来
为什么呢?看了文档,发现是和#table有关

table的计算方式

也就是说有nil值的时候,#table的计算结果并不确定
local function fun(...)
local arg = {...}
print(table.unpack(arg))
for k, v in pairs(arg) do
print(k, v)
end
print(arg [1],arg[2],arg[3], #arg)
print('***************')
end
fun(nil, 2, nil)
fun(1,2,nil)
fun(1,nil,nil)
fun(nil,nil,3)
2 2
nil 2 nil 0
***************
1 2
1 1
2 2
1 2 nil 2
***************
1
1 1
1 nil nil 1
***************
nil nil 3
3 3
nil nil 3 3
***************
总之,table中有nil值时,#table的结果并不确定。
所以以后使用table的时候,尽量不要设置nil,而是要table.remove
Lua unpack函数用法的更多相关文章
- 【小白学Lua】之Lua变长参数和unpack函数
一.简介 Lua的变长参数和unpack函数在实际的开发中应用的还挺多的,比如在设计print函数的时候,需要支持对多个变量进行打印输出,这时我们就需要用到Lua中的变长参数和unpack函数了. 二 ...
- Lua基础 函数(一)
转自: http://blog.csdn.net/wzzfeitian/article/details/8653101 在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作 ...
- Lua function 函数
Lua支持面向对象,操作符为冒号‘:’.o:foo(x) <==> o.foo(o, x). Lua程序可以调用C语言或者Lua实现的函数.Lua基础库中的所有函数都是用C实现的.但这些细 ...
- 博文推荐】Javascript中bind、call、apply函数用法
[博文推荐]Javascript中bind.call.apply函数用法 2015-03-02 09:22 菜鸟浮出水 51CTO博客 字号:T | T 最近一直在用 js 写游戏服务器,我也接触 j ...
- 【lua实战摸索】在b.lua调用a.lua的函数
需要掌握知识: lua table的使用(创建自己函数的表作为函数库) 普通函数的调用:tab.func(tab,参数) 等效于表中函数的调用tab:func(参数) 基本思路: 1.在相同目录下创建 ...
- lua的函数初识
学习到Lua的函数.认为有必要记下来. 參考教程:Programming in Lua 函数能够以表达式或陈述语句出现,例如以下所看到的: print(8*9, 9/8) a = math.sin(3 ...
- Lua 常用函数 一
lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...
- PHP unpack() 函数
实例 从二进制字符串对数据进行解包: <?php$data = "PHP";print_r(unpack("C*",$data));?>高佣联盟 w ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
随机推荐
- STM32之DMA实例
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zouleideboke/article/details/75092558 DMA简介: DMA(Di ...
- javascript 的惯性运动
移动端的惯性运动,最早来自 ios 的专利.用于手指滑动,离开屏幕之后,屏幕内容继续滚动.更有动态感. 这里,以 pc 端,鼠标横向(沿x轴) 拖拽的,惯性计算.移动端同理 具体代码如下: <! ...
- 补充第11期作业:Long.fastUUID与UUID.toString之间的关系
一 UUID.toString方法与Long.fastUUID方法的关联 UUID类 public final class UUID implements java.io.Serializable, ...
- js面向对象的几种方式
对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...
- java中的多态总结
一.多态的概述 ava作为面向对象的语言,同样可以描述一个事物的多种形态.如Student类继承了Person类,一个Student的对象便既是Student,又是Person. Java中多态的代码 ...
- C++ STL 之 deque
deque 和 vector 的最大差异? 一在于 deque 允许常数时间内对头端进行元素插入和删除操作. 二在于 deque 没有容量的概念,因为它是动态的以分段的连续空间组合而成,随时可以增加一 ...
- 四、DML语言
目录 简介 主要操作 插入语句 语法 修改语句 修改单表 删除语句 DELETE TRUNCATE 两种删除总结 简介 DML语言就是数据操作语言 主要操作 插入:insert 修改:update 删 ...
- sklearn--数据集的处理 模型参数选择
1.随机划分训练集和测试集 sklearn.model_selection.train_test_split 一般形式: train_test_split是交叉验证中常用的函数,功能是从样本中随机的按 ...
- 用命令行的方式把jmeter结果文件JTL生成csv格式的聚合报告
我们知道 利用jmeter 的GUI的 Aggragate Listner 很容易把一个JTL 文件另存为CSV 文件,该CSV 文件中自动分析了 Transactions 的 90%, Median ...
- 4'.deploy.prototxt
1: 神经网络中,我们通过最小化神经网络来训练网络,所以在训练时最后一层是损失函数层(LOSS), 在测试时我们通过准确率来评价该网络的优劣,因此最后一层是准确率层(ACCURACY). 但是当我们真 ...