今晚,开始,学习lua.
脚本,wiki上的解释
使用脚本语言[Scripting language]所写,脚本语言是为了缩短传统电脑语言编译连结的过程而创建的编程语言。
贴段豆瓣的:
今晚,开始,学习lua.
在lua中,一切都是变量,除了关键字。
1. 注释
--单行注释
--[[
多行注释
]]
2.lua编程
Hello,world!
print(“hello,world!”);
Lua中,语句之间可以用分号;隔开,也可以用空白隔开,一般来说,如果多个语句写在同一行的话,建议用分号隔开。
习惯用分号了
Lua 有好几种程序控制语句,如:
◆条件控制:if 条件 then … elseif 条件 then … else … end
◆While循环:while 条件 do … end
◆Repeat循环:repeat … until 条件
◆For循环:for 变量 = 初值,终点值,步进 do … end
◆For循环:for 变量1,变量2,… ,变量N in表或枚举函数 do … end
可以省略步进值,这时候,for循环会使用1作为步进值。
不同于其他程序设计语言的地方:
·语句块:
在C中是用{}括起来的,在LUA中,是用do和end括起来的。
比如: do print ('hello,world') end
可以在函数 和 语句块 中定义局部变量。
·赋值语句:
可同时给多个变量赋值: a,b,c,d = 1,2,3,4
甚至: a,b=b,a --真的好方便的交换功能
默认情况下,变量是全局的,
定义局部变量的方法: local a,b,c = 1,2,3 --a,b,c都为局部变量
·数值运算
支持 + - * / ,但lua多了^,表示指数乘方, 2^3 == 8
·连接两个字符串
".."运算符 : ‘cat,’..'i miss u' --print('cat cat .'.. "i miss u") 输出:cat cat .i miss u
·比较运算
< > <= >= == ~=
--~=是不等于
·逻辑运算
and or not --and和or与c区别很大
只有false和nil 才为 false,其他任何数据都计算为true, 0也为true.
and 和 or的运算结果不是true和false,而是和它的两个操作数相关:
a and b:如果a为false,则返回a;否则返回b
a or b:如果 a 为true,则返回a;否则返回b
最有用的语句是: x = x or v,它相当于:if not x then x = v end 。
·运算符优先级 --由高到低
^
not -(-元运算)
* /
+ -
..(字符串连接)
< > <= >= == ~=
and
or
·关键字
--关键字不能做变量,很少(相对来说~啦)
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
·变量类型
可以用 type() 函数来检查变量的类型
nil 空值,所有没使用过的值,都是nil,nil即是值,又是类型。
boolean 布尔值
number 数值。相当于double
string 字符串
table 关系表类型,很强大
function 函数类型,所有的函数,它本身就是一个变量
userdata 专用来与宿主(C/C++)打交道
thread 线程类型
·变量的定义
不管在任何地方使用变量,都不需要声明。并且默认都为全局变量。除非前面加local
区分大小写
定义变量的方法就是赋值,用 "=" 来赋值。
A.nil
var1=nil --nil要小写,空值,未使用过的值
B.boolean
布尔值有两种,true和false.
只有 false 和 nil 才为false,所有其他类型的值,都是true,包括0,空串……
varbo = true
C.number
num=40
实数的表示方法和C类似,如: 4 0.4 4.5e-3 0.3e+20
D.string
字符串。
s='hello,.hello' --最通用的方法,用双引号或单引号括起来一个字符串。
支持转义字符:
\a bell 响铃
\b back space 退格
\f form feed 换页
\n newline 换行
\r carriage return 回车
\t horizontal tab 水平制表
\v vertical tab 垂直制表
\\ backslash 反斜杠
\" double quote 双引号
\' single quote 单引号
\[ left square bracket 左方括号
\] right square bracket 右方括号
也可用另一种方式表示字符串,用[[ ]] 括起来的多行。
E.Table
关系表类型,很强大,可以把这种类型看作一个数组。C语言中的数组只能用unsigne int 来索引;在lua中,可以用任意类型作数组的索引。除了nil.
同样,在C语言中,数组的内容只允许一种类型,在Lua中,也可以用任意类型的值来作数组的内容,除了nil。
table定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。
T1 = {} -- 定义一个空表
T1[1]=10 -- 然后我们就可以象C语言一样来使用它了。
T1["John"]={Age=27, Gender="Male"}
这一句相当于:
T1["John"]={} -- 必须先定义成一个表,还记得未定义的变量是nil类型吗
T1["John"]["Age"]=27
T1["John"]["Gender"]="Male"
当表的索引是字符串的时候,我们可以简写成:
T1.John={}
T1.John.Age=27
T1.John.Gender="Male"
或
T1.John{Age=27, Gender="Male"}
上面的T1定义,可以写成:
T1=
{
10, -- 相当于 [1] = 10
[100] = 40,
John= -- 如果你原意,你还可以写成:["John"] =
{
Age=27, -- 如果你原意,你还可以写成:["Age"] =27
Gender=Male -- 如果你原意,你还可以写成:["Gender"] =Male
},
20 -- 相当于 [2] = 20
}
在写的时候,需要注意三点:
第一,所有元素之间,总是用逗号","隔开;
第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;
第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;
F.Function
函数,函数定义如下:
function add(a,b) --add函数名,a,b为参数
return a+b --return 用来返回结果
end
得前面说过,函数也是变量类型,所以,上面的函数定义,相当于:
add=function (a,b) return a+b end
重新给add赋值时,便表示不再使用这个函数了,可以赋值nil相当于用来清除add变量
lua也可接受可变参数个数,用"..."来定义的:
function sum(a,b,...) --...表示的参数,可以在函数中可使用局部变量(表)来得到:
可以同时返回多个结果:
function s()
return 1,2,3,4
end
a,b,c,d = s() --此时,a,b,c,d=1,2,3,4各个赋值
表类型可以拥有任意类型的值,包括函数。
t={
age=27 ,
add=function(self,n) self.age=self.age + n end
}
print(t.age) --27
t.add(t,10) --这句可以写成t:add(10) ,t:add(10) -- 相当于 t.add(t,10)
print(t.age) --37
3.1)函数的使用
function pythagorean(a, b)
local c2 = a^2 + b^2
return math.sqrt(c2)
end
print(pythagorean(3,4))
这里不知怎么出错了,是函数的问题吧,应该有头文件。
奥,解决了, sqrt 前加上 math
2)循环语句
--loops
for i=1,5 do
print ('i mmmmmm'..i)
end
for i=10,2,-3 do
print ('i miss u,第'..i..'天')
end
--输出:i miss u,第10天
i miss u,第7天
i miss u,第4天
3)条件分支语句
for i=1,5 do
print('i is now ' .. i)
if i < 2 then
print('small')
elseif i < 4 then
print('medium')
else
print('big')
end
end
输出:
i is now 1
small
i is now 2
medium
i is now 3
medium
i is now 4
big
i is now 5
big
if只需要一个end,哪怕用了多个elseif, 也是一个end.
4)其他的循环,while..do和repeat..until
-_-,这教程里没有while的例子,实验了一下,竟然写了死循环
i=0
while i<4 do
print(i)
end
end前加上自增i=i+1便好。
repeat是重复的:一直执行,直到条件不满足。
i=3
repeat
print ('a')
i=i-1
until
i<0
做的笔记。