Priest Tomb



Lua语言学习(一)——简单入门

写在前面

最近刚从 Java 转行做游戏开发,正式工作前先自己稍微学习了一下 Lua 这个脚本语言

这是在 windows 安装完 Lua (version:5.1.4)后自带的一个”新手指南”,可以方便入门一些基本语法


正文

1. print()

print("hello")
print "hello"

-- .. 用于拼接字符串
print("1" .. "2")

-- + 可以把字符串转为数字进行相加
print("1" + "2")

-- # 用于计算字符串长度
print(#"1234567")

2. comments

--[[两个连接符开始,
然后两对中括号内都是注释
而且可以换行]]

3. type()

a=1
b="123"
c={}
d=print

print(type(a))
print(type(b))
print(type(c))
print(type(d))

4. 变量命名

  • 可以用数字、字母、下划线,但不能用数字开头

  • 下划线开头的一般是特殊变量,比如 _VERSION

  • 单下划线 _ 常用作一个虚变量(dummy variable)

  • 变量名区分大小写

5. 关键字

lua中的关键字包括:

and、break、do、else、elseif、end、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until、while

6. 定义字符串

a="双引号中可直接使用'单引号',但\"双引号\"要转义"
b='单引号中可直接使用"双引号",但\'单引号\'要转义'
c=[[双方括号中
可以直接使用'单引号'
和"双引号",而且可以
换行]]

print(a)
print(b)
print(c)

7. 多赋值

a,b,c,d,e = 1,2,"three",'four',5

print(a,b,c,d,e)

8. 变量互换

a,b=1,2
a,b=b,a

print(a,b)

9. Number

a,b,c,d,e = 1,1.123,1E9,-123,.0008

print("a="..a,"b="..b,"c="..c,"d="..d,"e="..e)

10. Output

io.write("123")
io.write("test")

print()

11. Table

注:Lua中的下标从1开始

a={1,2,3}
b={"1","2","3"}
c={}
c.A="a"
c.B="b"

print(a,b,c.A,c["B"])

12. if else

a=1
if a==100 then
    print("a is 100")
elseif a==999
    print("a is 999")
else
    print("a is "..a)
end

13. 类”三元运算符”

使用短路求值实现三元运算符的效果

a=1
b=(a==1) and "one" or "not one"

print(b)

14. while

a=1
while a~=5 do
    io.write(a.." ")
    a=a+1
end

~= 就是不等于

15. repeat

a=1
repeat
    a=a+1
    print(a)
until a==5

16. for

for a=1,4 do
    print(a)
end

for a=1,6,3 do
    print(a)
end

17. for in

a={1,2,"three","four",5}

for key,value in pairs(a) do
    print(key,value)
end

18. break

a=0
while true do
    a=a+1
    if(a==10) then
        break
    end
end

19. functions

function myFirstLuaFunction()
    print("test")
end


--call func
myFirstLuaFunction()

--storage func
otherFunction = myFirstLuaFunction
otherFunction()

20. 方法返回值

function func()
    return "test"
end

a=func()
print(a)

21. 方法返回多值

function myFirstLuaFunctionWithMultipleReturnValues(a,b,c)
    return a,b,c,"My first lua function with multiple return values", 1, true
end

a,b,c,d,e,f = myFirstLuaFunctionWithMultipleReturnValues(1,2,"three")
print(a,b,c,d,e,f)

22. 变量作用域

没有local修饰的都是全局变量

b="global"

function myfunc()
    local b=" local variable"
    a="global variable"
    print(a,b)
end

myfunc()
print(a,b)

23. 格式化输出

function printf(fmt, ...)
    io.write(string.format(fmt, ...))
end

printf("Hello %s from %s on %s\n",
       os.getenv"USERNAME" or "there", _VERSION, os.date())

24. 内置标准库

Math
math.abs, math.acos, math.asin, math.atan, math.atan2, math.ceil, math.cos, math.cosh, math.deg, math.exp,
math.floor, math.fmod, math.frexp, math.huge, math.ldexp, math.log, math.log10, math.max, math.min, math.modf, math.pi,
math.pow, math.rad, math.random, math.randomseed, math.sin, math.sinh, math.sqrt, math.tan, math.tanh
String
string.byte, string.char, string.dump, string.find, string.format, string.gfind, string.gsub, string.len,
string.lower, string.match, string.rep, string.reverse, string.sub, string.upper

Table
table.concat, table.insert, table.maxn, table.remove, table.sort
Input/Output
io.close , io.flush, io.input, io.lines, io.open, io.output, io.popen,
io.read, io.stderr, io.stdin, io.stdout, io.tmpfile, io.type, io.write,

file:close, file:flush, file:lines ,file:read,
file:seek, file:setvbuf, file:write
Operating System
os.clock, os.date, os.difftime, os.execute, os.exit, os.getenv,
os.remove, os.rename, os.setlocale, os.time, os.tmpname

25. 外部库

require( "iuplua" )
ml = iup.multiline
    {
    expand="YES",
    value="Quit this multiline edit app to continue Tutorial!",
    border="YES"
    }
dlg = iup.dialog{ml; title="IupMultiline", size="QUARTERxQUARTER",}
dlg:show()
print("Exit GUI app to continue!")
iup.MainLoop()

26. Learn More

Lua Tutorials:

http://lua-users.org/wiki/TutorialDirectory

“Programming in Lua” Book:

http://www.inf.puc-rio.br/~roberto/pil2/