lua自学基础1

字符串定义

  1. "[["用表示多行字符串
  2. ==nil时直接释放


函数

  1. 函数可作为参数传递 
  2. 可变参数函数

myprint=function(p)
	print("this is"..p);
end

function add(a1,a2,x)			--函数可作为参数传递
	c=a1+a2;
	x(c);
end

add(4,5,myprint);
function average(...)					--可变参数函数,还有print之类
	res=0;
	local arg={...}						--arg是默认表 要来获取参数
	for k,v in pairs(arg)do
		res=res+v;						--arg最后一个值表示表内参数个数,要先用本地定义来消除最后一值
	end
	print(res)
	print(#arg)
end

average(1);
average(12,56);
average(13,56,58);



  1. table内存使用特性,当把定义好的table1赋值给 table2时,两个同时引用同一个内存区域,并不是两个区域同种类型
  2. insert指定索引添加时索引后面 会向后移动
  3. remove指定索引会向前移动
  4. 赋值nil 制定值会为 nil
  5. table排序:自定义函数和迭代
function max(x)						--自定义取得最大值函数
	c=-10^10000;
	for i=1,#x do

	if(x[i]>=c) then
		c=x[i];

	end
	i=i+1;
	end
	return c;
end

--]]

function max2(xx)					--用迭代和遍历取得最大值
local cc=-1000;
	for v,k in pairs(xx) do
		if(cc<=k)then
			cc=k;
		end
	end
	return cc;
end


print(max2(mytab1));
--[[
table.sort(mytab1);
print(mytab1[#mytab1]);



变量

  1. a,b=20,30; --变量可以连续赋值
  2. a,b=b,a; --可以交叉转换
  3. function test()
    return 2,3; --函数可以返回多个值
    end
  4. bb=max; --把函数赋值给变量
    c1=max(5,1); --把函数的值赋值给变量

循环

1 while 
	a=1;
	while (a<=20) do
		if(a%2==1)then
			print(a);
		end
		a=a+1;
	end
2 for
for var=1,10,2 do				--数值型var=start,end,step(递增值)默认为1
	print(var);
end

tab={"av","fr","cv","ev"};
for de,dc in pairs(tab) do		--泛型 相当于foreach,(pairs)
	print(de,dc);
end
3 repeat
a=1;
repeat							--相当于 do while;
								--不过while满足条件时执行 until  满足条件 跳出
	print(a);
	a=a+1;
until(a>10)

判断

if(i==50)then --注意格式if后面要加then;else不用
print("i==50");
elseif(i==100) then --elseif也要加


运算符

  1. 转义字符
  2. 字符串操作
print("hello\nworld");					--转义字符\\==\;  \",\'==",'
print("c:\\you\\hold");
print("my name is \"liming\"")

str="my name is SiKi"					--字符串操作
str1=string.upper(str);					--转大写
str2=string.lower(str);					--转小写

str3=string.gsub(str,"i","666",1);		--替换(替换几次)
index=string.find(str,"name");		--索引查询
str5=string.reverse(str);				--颠倒


print(str1,str2,str3,"\n",index,str5)


str6=string.format("%02d+%d=%d",1,2,(1+2));

print(str6);

str7=string.format("最后%s==%s","终于","爱");
print(str7);

--]]


--[[
s1=string.char(97,98,55);			--数字转字符
s2=string.byte("Ab");				--字符转数字 默认为第一个
print(s1,s2);

str=string.len("agb");
print(str);


for word in string.gmatch("he is @teacher","%@") do	--正则
	print(word);
end


print(str4);


数组

  1. 没有键的表相当于数组
  2. 多维数组
array={{},{},{}}

for i=0,4 do							--多维数组创建
	array[i]={};
	for j=0,2 do
		array[i][j]=string.format("%d%d",i,j);
	end
end


for i=0,4 do

	for j=0,2 do
		print(array[i][j]);
	end
end

迭代器

  1. 内置迭代器
  2. 自定义迭代器
array={"lua","C++","oc"}			--迭代器,pairs 遍历所有键值对,ipairs遍历所有索引 当值等于nil是停止

for o,v in pairs(array) do
	print(o,v);
end
array[2]=nil;

for o,v in ipairs(array) do
	print(o,v);
end


function square(state,control)		--自定义 迭代函数(状态函数,控制函数)
	if(control<=state) then
		control=control+1;
		return control,control*control;
	end
end


for d,f in square,9,0 do
	print(d,f)
end

全部
--[[
print();
--]]
--[[
print(type("hello world"));
print (type(10));
print(type(10.2));
print(nil);
print(x);
print (s);
print(type(type));
--]]
--[[table
tab1={key01="value",key02="bb"};
print(tab1.key01,tab1.key02)
tab1=nil
tab1.tab1=nil;
print(tab1)
--]]

--boolean
--[[
if nil then
print(true)
else
print(false)
end
--]]

--numbwe
--[[
print(type(0.2e-55));
--]]

								--"[["用表示多行字符串

--]]


--[[
print(html);--#号代表字符统计


print('6'+'3');
print('3.2e-1'*'6')
print('s'..'b');--".."代表字符拼接



tab1={}
tab2={key1="sdsd",key2="sbsb"}
tab3={"apple","banana","grape","pear"}
print(tab2.key1)
print(tab1);
print(tab3[1])    --lua数组下标从1开始
for tab,val in pairs(tab3) do
	print(tab..":"..val);
end

tab3[1]="appleapple"
tab3[2]=nil;				--'==nil时直接释放
tab3[100]="sssss"
for tab,val in pairs(tab3)do
print(tab..":"..val);
end
--表的下标不会填补空缺,可以不连续

--]]

--]]

--[[ 递归函数
s1=1;
function bb(n)
	if(n==1)then
	return s1;
	else
	return n*(bb(n-1));		--return的时候还要调用==5*bb(4)==5*4*3*2*1
	end
end
print(bb(5));
bb2=bb;

print(bb2(6))

--]]

--[[
function x1(tab,fun)			--函数可看作变量调用在tab获取键值对,在fun输出
	for key,val in pairs(tab) do
		fun(key,val);
	end
end
tab={k1="11",k2="12"}
function fun(v,k)
	print(v,k);
end
x1(tab,fun);

function fun1(v,k)
	print(v..".."..k);
end

x1(tab,fun1);


x1(tab,function(v,k)				--虚函数。在调用里面定义函数不用函数名
print(v,k)
end
)

--]]

--[[
a=5;a="hello";b=20;
print(a,b);

function test()
	local b=10;
	a=100;
end
test()								--函数必须调用里面的变量才会起作用
									--局部变量在当前语句结束时就会自动释放
print(a,b);


do
	local a=10;						--局部变量省资源
	local b=11;
	print(a,b);
end
print(a,b);


--]]

--[[
a,b=20,30;							--变量可以连续赋值
print(a,b);
a,b=b,a;							--可以交叉转换
print(a,b);
function test()
	return 2,3;					--函数可以返回多个值
end

c=test();
print(c);
c,d=test();
print(c,d);

a,b=20;
print(a,b)

--]]

--[[
a=1;
while (a<=20) do
	if(a%2==1)then
		print(a);
	end
	a=a+1;
end

--]]

--[[

for var=1,10,2 do				--数值型var=start,end,step(递增值)默认为1
	print(var);
end

tab={"av","fr","cv","ev"};
for de,dc in pairs(tab) do		--泛型 相当于foreach,(pairs)
	print(de,dc);
end

a=1;
repeat							--相当于 do while;
								--不过while满足条件时执行 until  满足条件 跳出
	print(a);
	a=a+1;
until(a>10)


--]]

--[[

for i=1,10 do
	for j=1,i do
		print(j);
	end
end

for i=1,10 do
	j=1;
	while(j<=i)do
		print(i);
		j=j+1;
	end
end


--]]

--[[

i=50
if(0) then
print("0 is true");
end

if(i==50) then
print("i==50");
else
print("i!=50");
end

if(i==50)then					--注意格式if后面要加then;else不用
	print("i==50");
elseif(i==100) then			--elseif也要加
	print("i==10");
else
print("want not write");
end

--]]


--[[

local function max(num1,num2)
	if(num1>num2)then
		return num1;
	else
		return num2;
	end
end
print(max(50,40));

bb=max;							--把函数赋值给变量
c1=max(5,1);					--把函数的值赋值给变量
print(c1);


myprint=function(p)
	print("this is"..p);
end

function add(a1,a2,x)			--函数可作为参数传递
	c=a1+a2;
	x(c);
end

add(4,5,myprint);

function temp()					--函数可返回多个值;
	return 10,20,30;
end

a,b,c=temp();
print(a,b,c);


--]]

--[[

function average(...)					--可变参数函数,还有print之类
	res=0;
	local arg={...}						--arg是默认表 要来获取参数
	for k,v in pairs(arg)do
		res=res+v;						--arg最后一个值表示表内参数个数,要先用本地定义来消除最后一值
	end
	print(res)
	print(#arg)
end

average(1);
average(12,56);
average(13,56,58);


--]]

--[[

a=10;b=12;							--关系运算符!= 等于~=
if(a~=b) then
	print("not equip");
end


print(false and true);				--逻辑运算符(|| && !) and or not
print(false or true)
print(not false);


tab={32,33,56}						--#tab取得的是最大索引值
print(#tab);
tab=nil
tab={}
tab={key1="1",key2="2"}				--而且必须数组索引 下标为1.2.3
print(#tab);
tab=nil;
tab={}
tab[1]=1;
tab[2]=2;
tab[4]=4;
print(#tab);

--]]

--[[

print("hello\nworld");					--转义字符\\==\;  \",\'==",'
print("c:\\you\\hold");
print("my name is \"liming\"")

str="my name is SiKi"					--字符串操作
str1=string.upper(str);					--转大写
str2=string.lower(str);					--转小写

str3=string.gsub(str,"i","666",1);		--替换(替换几次)
index=string.find(str,"name");		--索引查询
str5=string.reverse(str);				--颠倒


print(str1,str2,str3,"\n",index,str5)


str6=string.format("%02d+%d=%d",1,2,(1+2));

print(str6);

str7=string.format("最后%s==%s","终于","爱");
print(str7);

--]]


--[[
s1=string.char(97,98,55);			--数字转字符
s2=string.byte("Ab");				--字符转数字 默认为第一个
print(s1,s2);

str=string.len("agb");
print(str);


for word in string.gmatch("he is @teacher","%@") do	--正则
	print(word);
end


print(str4);

--]]

--[[

tab={};

for i=-2,2  do						--tab表的索引可以为负数
	tab[i]=i;
end

for i=-2,2  do
	print(tab[i]);
end


print(tab.value);

--]]

--[[

array={{},{},{}}

for i=0,4 do							--多维数组创建
	array[i]={};
	for j=0,2 do
		array[i][j]=string.format("%d%d",i,j);
	end
end


for i=0,4 do

	for j=0,2 do
		print(array[i][j]);
	end
end


--]]


--[[

array={"lua","C++","oc"}			--迭代器,pairs 遍历所有键值对,ipairs遍历所有索引 当值等于nil是停止

for o,v in pairs(array) do
	print(o,v);
end
array[2]=nil;

for o,v in ipairs(array) do
	print(o,v);
end


function square(state,control)		--自定义 迭代函数(状态函数,控制函数)
	if(control<=state) then
		control=control+1;
		return control,control*control;
	end
end


for d,f in square,9,0 do
	print(d,f)
end

--]]

--[[

tab1={};
tab1["s1"]="s1";
tab1[2]="s2";

for v,k in pairs(tab1) do
	print(v,k);
end

tab2=tab1;								--table内存使用特性,当把定义好的table1赋值给 table2时,两个同时应用同一个内存区域,并不是两个区域同种类型

tab1=nil;




for v,k in pairs(tab2) do
	print(v,k);
end


--]]



--[[
mytab={"java","oc","a","a++"}

print(table.concat(mytab));

mytab[#mytab+1]="boo";

for v,k in pairs(mytab) do
	print(v,k);
end

table.insert(mytab,"PHP");
for v,k in pairs(mytab) do
	print(v,k);
end


table.insert(mytab,2,"F++");

for v,k in pairs(mytab) do			--insert指定索引添加时索引后面 会向后移动
	print(v,k);
end


table.remove(mytab,2)

for v,k in pairs(mytab) do			--remove指定索引会向前移动
	print(v,k);
end


mytab[2]=nil;						--赋值nil 制定值会为 nil

for v,k in pairs(mytab) do
	print(v,k);
end

--]]


--[[

mytab={"a1","b2","c2"}				--table 排序

table.sort(mytab);

for v,k in pairs(mytab) do
	print(v,k);
end


mytab1={54,85,96,1}

print(#mytab1)

--]]
--[[
function max(x)						--自定义取得最大值函数
	c=-10^10000;
	for i=1,#x do

	if(x[i]>=c) then
		c=x[i];

	end
	i=i+1;
	end
	return c;
end

--]]
--[[

function max2(xx)					--用迭代和遍历取得最大值
local cc=-1000;
	for v,k in pairs(xx) do
		if(cc<=k)then
			cc=k;
		end
	end
	return cc;
end


print(max2(mytab1));

--]]
--[[
table.sort(mytab1);
print(mytab1[#mytab1]);
--]]








你可能感兴趣的:(unity)