lua记录

2022-06-12 17:19:11 浏览数 (1)

代码语言: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));
lua

0 人点赞