很多站长朋友们都不太清楚phplua表,今天小编就来给大家整理phplua表,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 怎么把下面php代码换成lua 2、 怎么把如下php代码写成lua代码? 3、 计算中常说的元表是什么? 4、 关于lua表更纯粹一些 性能会有所提升 全数组 或者全key表 5、 lua数组和表的区别 怎么把下面php代码换成lualocal function decode(str, skey)
str = str or ""
skey = skey or "cxphp"
local replaceStr = string.gsub(str, "O0O0O", "=")
replaceStr = string.gsub(replaceStr, "o000o", "+")
replaceStr = string.gsub(replaceStr, "oo00o", "/")
local strArr = {}
local replaceStrLen = string.len(replaceStr)
for pos = 1, replaceStrLen, 2 do
local posEnd = math.min(pos + 1, replaceStrLen)
strArr [#strArr + 1] = string.sub(replaceStr, pos, posEnd)
end
local strCount = #strArr
for key = 1, string.len(skey) do
local value = string.sub(skey, key, key)
print(key, value, strArr[key], string.sub(strArr[key], 2, 2))
if key <= strCount and strArr[key] and string.sub(strArr[key], 2, 2) == value then
strArr[key] = string.sub(strArr[key], 1, 1)
end
end
local needToDecode = table.concat(strArr)
print(needToDecode)
-- TODO: find a lib base64_decode
end
怎么把如下php代码写成lua代码?base64需要自己找个库调用一下,其他部分实现了,下面是代码
local function decode(str, skey)
str = str or ""
skey = skey or "cxphp"
local replaceStr = string.gsub(str, "O0O0O", "=")
replaceStr = string.gsub(replaceStr, "o000o", "+")
replaceStr = string.gsub(replaceStr, "oo00o", "/")
local strArr = {}
local replaceStrLen = string.len(replaceStr)
for pos = 1, replaceStrLen, 2 do
local posEnd = math.min(pos + 1, replaceStrLen)
strArr [#strArr + 1] = string.sub(replaceStr, pos, posEnd)
end
local strCount = #strArr
for key = 1, string.len(skey) do
local value = string.sub(skey, key, key)
print(key, value, strArr[key], string.sub(strArr[key], 2, 2))
if key <= strCount and strArr[key] and string.sub(strArr[key], 2, 2) == value then
strArr[key] = string.sub(strArr[key], 1, 1)
end
end
local needToDecode = table.concat(strArr)
print(needToDecode)
-- TODO: find a lib base64_decode
end
计算中常说的元表是什么?元表就是一个lua表,程序开发中有元表,那个值都可以有一个元表。
1.Lua 中的每个值都可以有一个 元表。 这个 元表 就是一个普通的 Lua 表, 它用于定义原始值在特定操作下的行为。 如果你想改变一个值在特定操作下的行为,你可以在它的元表中设置对应域。 例如,当你对非数字制作加操作时, Lua 会检查该值的元表中的 "__add" 域下的函数。 如果能找到,Lua 则调用这个函数来完成加这个操作。
2.元表中的键对应着不同的 事件 名; 键关联的那些值被称为 元方法。 在上面那个例子中引用的事件为 "add" , 完成加操作的那个函数就是元方法。
你可以用 getmetatable 函数 来获取任何值的元表。
3.使用 setmetatable 来替换一张表的元表。在 Lua 中,你不可以改变表以外其它类型的值的元表 ; 若想改变这些非表类型的值的元表,请使用 C API。
表和完全用户数据有独立的元表 (当然,多个表和用户数据可以共享同一个元表)。 其它类型的值按类型共享元表; 也就是说所有的数字都共享同一个元表, 所有的字符串共享另一个元表等等。 默认情况下,值是没有元表的, 但字符串库在初始化的时候为字符串类型设置了元表 ()。
4.元表决定了一个对象在数学运算、位运算、比较、连接、 取长度、调用、索引时的行为。 元表还可以定义一个函数,当表对象或用户数据对象在垃圾回收 ()时调用它。
5.接下来会给出一张元表可以控制的事件的完整列表。 每个操作都用对应的事件名来区分。 每个事件的键名用加有 '__' 前缀的字符串来表示; 例如 "add" 操作的键名为字符串 "__add"。 注意、Lua 从元表中直接获取元方法; 访问元表中的元方法永远不会触发另一次元方法。 下面的代码模拟了 Lua 从一个对象 obj 中获取一个元方法的过程:
6.对于一元操作符(取负、求长度、位反), 元方法调用的时候,第二个参数是个哑元,其值等于第一个参数。 这样处理仅仅是为了简化 Lua 的内部实现 (这样处理可以让所有的操作都和二元操作一致), 这个行为有可能在将来的
7.元表中的键对应着不同的 事件 名; 键关联的那些值被称为 元方法。 在上面那个例子中引用的事件为 "add" , 完成加操作的那个函数就是元方法。
你可以用 getmetatable 函数 来获取任何值的元表。
8.使用 setmetatable 来替换一张表的元表。在 Lua 中,你不可以改变表以外其它类型的值的元表 ; 若想改变这些非表类型的值的元表,请使用 C API。
表和完全用户数据有独立的元表 (当然,多个表和用户数据可以共享同一个元表)。 其它类型的值按类型共享元表; 也就是说所有的数字都共享同一个元表, 所有的字符串共享另一个元表等等。 默认情况下,值是没有元表的, 但字符串库在初始化的时候为字符串类型设置了元表 ()。
关于lua表更纯粹一些 性能会有所提升 全数组 或者全key表输出为:
in print_ipairs
1
2
3
4
5
6
7
8
9
10
in print_ipairs
1
in print_pairs
1
7
8
10
k
5
9
在这里,首先对表a赋值,有1-10共十个元素,通过调用函数print_ipairs可知,这些元素都是存放在数组部分的,这是因为ipairs取的是Table的数组部分元素.
在这之后,人为的将其中2,3,4,6元素删除,造成原来数组不满一半元素被利用上的现象,然后再插入一个新key "k",以让这个Table重新分配空间.再此之后,再次调用ipairs遍历a的数组部分,可以看到只有1被打印出来了,也就是说,在重新分配空间之后,除去已经被删除的2,3,4,6之外,只有1还在数组里面,剩下的5,7,8,9,10已经不在数组部分了.紧接着调用pairs遍历这个表,可以看出这些已经不在数组部分的值又被打印出来了,并且它们的顺序已经被打乱,不再按照数字大小顺序来排列了,它们在这次重新分配中被挪动到了hash部分.
这个实验既验证了我们前面的分析,同时也告诉我们,Table的重新分配,实际上代价是很大的,因此不建议在实际程序中,一个Table即有数组部分,也有Hash部分,纯粹一些,性能上会有提升.
lua数组和表的区别两者之间的区别:
一,空间大小:
1,)它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小。
2,)ArrayList的空间是动态增长的,如果空间不够,它会创建一个空间比原空间大一倍的新数组,然后将所有元素复制到新数组中,接着抛弃旧数组。而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。
二,存储内容
1,)Array数组可以包含基本类型和对象类型,
2,)ArrayList却只能包含对象类型。 但是需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。
三,方法:
ArrayList作为Array的增强版,当然是在方法上比Array更多样化,比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。
适用场景:
如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就选择ArrayList。而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择LinkedList。
关于phplua表的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。