Lua语言15分钟快速入门
1
u = [[两个方括号
用于
多行的字符串.]]
2
t = nil – 未定义的t
3
通过do/end等关键字标识出程序块
while num < 50 do
num = num -1 ;
end;
3
~= 表示不等于
== 可用于字符串比较
4
默认全局变量
定义全局变量通过
local关键字
5
.. 用于连接字符串
6未定义的变量返回nil
foo = anUnknowVariable – foo值等于nil
只有nil和false被判为false,0和”“被判为true
7
or和and是可短路的.
a?b:c的操作:
ans = aBoolValue and “yes” or “no”
8
使用”100,1,-1”表示递减的范围(begin,end,step)
for j = 100,1,-1 do
fredSum = fredSum + j
end
9
repeat
print(“the way of the future”)
num = num -1
until num == 0
10
定义函数
function fib(n)
if n < 2 then
return 1
end
return fib(n - 1) + fib(n - 1)
end
11
支持闭包及匿名函数
function adder(x)
return function(y)
return x + y
end
12
返回值,函数调用,复制都可以使用长度不匹配的list
不匹配的接收方会被赋值为nil
不匹配的发送方会被忽略
x,y,z = 1,2,3,4 –> x=1,y=2,z=3,4被丢弃
13
function bar(a,b,c)
print(a,b,c)
return 4,8,15,16,23,42
end
x,y = bar(“zaphod”) –> prints”zaphod nil nil”,x=4,y=8,后续被丢弃
14
函数可以是局部的或者全局的
function f(x)
return x * x
end
等价于
f = function(x)
return x * x
end
local function g(x)
return math.sin(x)
end
等价于
local g;
g = function(x)
return math.sin(x)
end
15
三角函数以弧度作为单位
一个字符串作为参数时,可以不用括号
print “hello”
16
table是Lua唯一的数据结构
是关联数组,通过哈希表查找
key默认是String类型
t = {key1 = "value1",key2 = "value"}
print(t.key1)
打印value1
t.key2 = nil
删除key2
17
可以使用任意非nil值作为key
字符串和数字是可用性较好的key
18
只需要一个table做参数的调用不需要使用括号
function h(x)
print(x.key1)
end
h{key1 = “Sonmi~452”} –> 打印Sonmi~452
19
遍历table
for key,val inparis(u) do
print(key,val)
end
20
_G是特殊的table,用于保存所有的全局变量
print(_G[“-G”] == _G) –> 打印”true”
21
table按照list/array的方式使用
List的迭代方式会隐含添加int的key
v = {“value1”,”value2”,1.21,”gigawatts”}
for i=1,#v do
print(v[i])
end
“#v(table名)是list的长度”
list的索引从1开始(sad脸
list并非真正的类型,还是一个table(通过连续的整数key实现)
22
元表和元方法
table允许重定义table的一些操作
代码太多懒得贴…自己去找吧(傲娇脸
23
类风格的table和继承
代码更多了…自己找去吧(哼
24
模块
local mod = require(“mod”) – 运行mod.lua
等价于
local mod = (function()
<contents of mod.lua>
end)()
require用于包含包含模块(针对没有被缓存的情况)
require返回的值会被缓存,所以不管require多少次,文件只会被调用一次
25
dofile和require类似,只是不做缓存,因此每次dofile文件都会被调用
26
loadfile加载一个lua文件,但并不运行.
loadstring是loadfile的字符串版本