代码语言:javascript复制
-- https://github.com/aerospike/aerospike-lua-core/blob/master/src/as.lua
-- https://github.com/aerospike/aerospike-client-java
-- Create a new Map my merging two maps.
-- The function `f` is a function used to merge the value of matching keys.
--
function map.merge(m1,m2,f)
local mm = {}
for k,v in map.pairs(m1) do
mm[k] = v
end
for k,v in map.pairs(m2) do
mm[k] = (mm[k] and f and type(f) == 'function' and f(m1[k],m2[k])) or v
end
return map(mm, map.size(m1) map.size(m2))
end
-- 一个合并table的函数
function table.merge(src,des)
for k,v in pairs(src) do
des[k] = v
end
return des
end
t1 = {a=1,b=2,c=3}
t2 = {a=22,b=55,f=12,g=12}
-- 遍历table
for k,v in pairs(table.merge(t1,t2)) do
print(k.."="..v)
end
结果为:
a=1
c=3
b=2
g=12
f=12
-- ------------
-- 函数传递
myPrint = function(param)
print("打印函数:",param)
end
myPrint(22)
function add(num1,num2,printFunction)
result = num1 num2
printFunction(result)
end
add(22,77,myPrint)
-- add函数传入来一个打印函数,名字可以不一样
function add(a,b,myPrint1)
local c = a b
myPrint1(c)
end
-- 定义一个打印函数
function myPrint(param)
print('结果为='..param)
end
add(11,22,myPrint)
print("-----------")
-- 函数返回多个值
function maxNum(a)
local mi = 1
local m = a[mi]
for i,v in pairs(a) do
if v > m then
mi = i
m = v
end
end
return m,mi
end
print(maxNum({8,10,23,12,5}))
print("-----------")
-- if elseif
c = 200
if(c == 10)
then
print("c==10")
elseif (c==20)
then
print("c==20")
elseif (c==30)
then
print("c==40")
else
print("不认识")
end
print("-----------")
-- goto
for i=1,3 do
if i <= 2 then
print(i,"yes,continue")
goto label2
end
::label2:: print("在goto里")
print(i,"结束了内层")
end
-- break
print("-----------")
a = 10
while(a<20)
do
print(a)
a = a 1
if (a > 15)
then
break;
end
end
-- 范型for循环
tab2 = {"one",2,"three",4}
for i,v in ipairs(tab2) do
print(i,v)
end
for i,v in pairs(tab2) do -- pair和ipair
print(i,v)
end
for i,v in pairs(tab2) do
print(v)
end
print("-----------")
-- 数值for循环
function f(x)
print(x)
return 2*x
end
for i = 1,f(3) do -- 默认步长是1,f(x)只会计算一遍
print(i)
end
print("-----------")
for i = 1,f(3),2 do -- 指定步长是2
print(i)
end
print("-----------")
a=3
while(a ~= 0)
do
print("a="..a)
a = a -1
end
print("-----------")
-- 本地变量和全局变量
a=14;
function test1()
a = 18
print("内部a="..a)
local b = 22
end
test1()
print("外部a="..a)
print(b)
print("-----------")
-- 赋值
a,b,c = 11,22,"good"
print(a)
print(b)
print(c)
a,b,c = c,b,a --交换变量
print(a)
print(b)
print(c)
-- boolean 类型只有两个可选值:true(真) 和 false(假),
-- Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true:
-- type
print(type(x))
print(type(x)==nil)
print(type(x)=="nil")
print(type(type(x))) -- type(x)的结果是个字符串的nil
-- table使用
tab1= {key1="val1",key2="val2","val3"}
for k,v in pairs(tab1) do
print ("k="..k..",v="..v)
end -- ???
print("-----------")
tab2 = { name="zhangsan",age=12}
for k,v in pairs(tab2) do
print ("k="..k..",v="..v)
end
print("-----------")
tab2.name=nil -- 相当于删除name
for k,v in pairs(tab2) do
print ("k="..k..",v="..v)
end
print("-----------")
-- 基础
print(b);
b=123;
print(b);
print(type(b));
b="23343";
print(b);
print(type(b));
-- aaa
-- [[fff --]]
b=nil;
print(b);
print(type(b));