1.
打印Hello World
打开cmd(命令行) 输入 lua进入交互模式,在交互模式下 输入 print("Hello World!")
或在 SciTE中写同样的代码
程序块的分隔问题
一.
b=1 a=2*b
二.
b=1;a=2*b
三.
b=1
a=2*b
四.
b=1;
a=2*b
这四个表达的是同一个意思
2.一些操作
lua -e "print('Hello World')" --先打印完Hello World 再进入交互模式
lua -i "lua文件的绝对路径" --执行这个文件,绝对路径的\字符用单的
lua -l a --加载库文件 a
在交互模式下输入 dofile("lua文件绝对路径") --绝对路径的\字符用双的
退出交互模式 输入os.exit()或按ctrl+z
修改_PROMPT的值,可以修改相应的进入交互模式下左边的标识
=a --交互模式下可以输出a的值
3.词法规范
标识符只能由字母,数字,下划线组成的字符串(注意_PROMPT这种下划线加大写字母的标识符尽量不要用)
全局变量:
不用声明,直接赋值就好,删除时赋值为nil
4.类型与值
8种基础类型nil boolean number string userdata function thread table
type(类型) 可以返回一个类型名称
如: print(type("Hello")) --返回值为string
(1)nil类型
只有一个值nil
(2)boolean类型
有两个值 true和false
只有false和nil被认为假,其余都被认为是真(0也是真)
(3)number类型 (类似于c里面的int float double 等等都能表示,而且还可以写科学计数法)
(4)string类型
不能直接被修改
可以这样 a="one string"
b=string.gsub(a,"one","another")
间接修改
a= "a line"
b= 'tow lines'
都是合法的
转义字符\ \a响铃 字符串中加单引号
"I'm a student" 双引号中可以加单引号
更好 的是\' \" 这样前面跟上转义字符
\n回车 \能够管后面的三位十进制数
(5)table类型
类似于c中的数组,但比较奇葩,竟然可以不同维混着用,也可以索引既有数字也有字符串
a={} --创建一个空表
a[3]=2 --添加元素
a["x"]=2
a.x=6
--上面两句都是修改的a["x"]的值
#a 可以获取表a的大小
a={x=6,y=8}就相当于a.x = 6 ;a.y=8
a={{2},{3}} 表示a[1]=2 a[2]=3
a={"asd","fgh","jkl"}也是同理
a={{x=10,y=9},{6}} 表示a[1]["x"]=10 a[1]["y"]=9 a[2]=6 这是比较奇葩的地方,竟然一维二维混着用
利用table类型构造式只能在初始化时刻发挥作用,并且新创建table类型的变量时又会新开辟空间这一点写有关链表的操作 ....果然道理都是一样的,就是换一种语法而已,如果有没学过数据结构的,建议学一下数据结构,代码如下:
node={}
list = node
function Init() --初始化
list.value=0
list.next=nil
end
function RearInsert(n) --尾插
newnode = {}
newnode.value=n;
newnode.next=nil
node.next=newnode
node=node.next
list.value=list.value+1
end
function HeadInsert(n) --头插
newnode = {}
newnode.value=n
newnode.next=list.next
list.next=newnode
list.value=list.value+1;
end
Init()
RearInsert(5)
HeadInsert(6)
HeadInsert(7)
l = list
while l do
print(l.value)
l = l.next
end
5.表达式
算数操作符
注意^不是异或,而是求幂的 3^4表示3的4次方
取模运算符% 可以用于小数
x=3.14
x-x%1 就表示x的整数部分
x-x%0.1 就表示x精确到一位小数
x-x%0.01 就表示x精确到二位小数
这也是比较奇葩的地方
关系操作符
~=是不等于符号, 而不是 !=
逻辑操作符
and or not
and 第一个操作数为真就返回第二个操作数 否则返回第一个操作数
or 第一个操作数为真就返回第一个操作数 否则返回第二个操作数
一些技巧
x=x or v 等价于 if not x then x=v end
a and b or c 等价于C中的a?b:c
max = (x>y) and x or y 这样可以返回x与y中的较大者