Lua语法学习(一)

  • Window环境下安装Lua

    我是用集成好的 Lua for Window 集成包安装
    也可以通过通过下载官方源码,编译出库、编译器、解释器
    在window下可以使用一个叫”SciTE”的IDE环境来执行Lua程序
    Lua for Window下载地址:http://luaforge.net/frs/download.php/4535/LuaForWindows_v5.1.4-35.exe
    官方下载地址:http://www.lua.org/download.html


  • Lua基本语法

    Lua提供交互式编程,可以在命令行中输入程序并且立即查看结果
    Lua语法学习(一)_第1张图片
    同时也有脚本编程
    将Lua程序代码保存到一个以.lua的后缀文件中执行
    Lua语法学习(一)_第2张图片

注释
在Lua中单行注释为两个减号

--注释

多行注释

--[[
zzzzzzz
zzzzzzz
zzzzzzz
]]

  • Lua数据类型

    Lua的数据类型只有八种,分别是 nil, boolean, number, string, function, userdata, thread, table
    nil————空值,在条件判断中为false
    boolean—-两个值,false和true
    number—–双精度类型的实浮点数
    string——-字符串类型,有一对双引号或单引号来表示
    function—-方法,函数
    userdata—任意存储在变量中的c数据结构
    thread——执行的独立线路,用于协同程序
    table——–在Lua中table是一个关联数组,数组索引可以是字符串或数字

    可以使用type()函数来判断数据类型

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

  • Lua变量
    Lua的变量类型有三种 : 全局变量, 局部变量, 作用域
    在Lua中,全局变量的声明哪怕是在语句或函数中声明,只有前面没有local修饰变量,都是全局变量
    局部变量的声明要在变量前加local修饰符
    局部变量的作用域从声明变量开始到所在的语句块结束
    变量的默认值均为nil
    例:
a = 5               -- 全局变量
local b = 5         -- 局部变量

function joke()
    c = 5           -- 全局变量
    local d = 6     -- 局部变量
end

joke()
print(c,d)          --> 5 nil

do 

    local a = 6     -- 局部变量
    b = 6           -- 全局变量

    print(a,b);     --> 6 6
end

print(a,b)      --> 5 6

赋值

a = "hello" .. "world"
b = b + 1

Lua也可以对多个变量同时赋值

a, b = 10 b + a    <--->   a = 10, b = b + a

当变量个数和值个数不同时,Lua会一直根据变量个数采取措施
变量个数 > 值个数 按变量个数补足nil
变量个数 < 值个数 多余的值会被忽略

a, b, c = 0, 1
print(a,b,c)             --> 0   1   nil

a, b = a+1, b+1, b+2     -- value of b+2 is ignored
print(a,b)               --> 1   2

a, b, c = 0
print(a,b,c)             --> 0   nil   nil

其中最后一种赋值方法是错误的,应该从依次对每个变量进行赋值

a, b, c = 0, 0, 0
print(a,b,c)             --> 0   0   0

  • Lua循环
    While循环
while(condition)
do
    statements
end

a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end

输出结果

a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15
a 的值为: 16
a 的值为: 17
a 的值为: 18
a 的值为: 19

for循环
for循环分为两种 : 数值循环和泛型循环

数值循环

for var=exp1,exp2,exp3 do  
    <执行体>  
end  

var从exp1变化到exp2,每次以exp3的值进行增长,并且执行一次执行体,其中exp3是可选的,如果没有指定exp3的值,那么会默认为1

for i=1,f(x) do
    print(i)
end

for i=10,1,-1 do
    print(i)
end

for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。

function f(x)
    print("function")
    return x * 2
end

for i = 1, f(5) do print(i)
end

输出结果

function
1
2
3
4
5
6
7
8
9
10

泛型循环
泛型for循环是通过一个迭代器来遍历所有值,类似foreach语句

for i,v in ipairs(a) 
    do print(v) 
end  

i为数组索引值,v是对应的索引数组元素值,ipairs为一个迭代器函数

days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}  
for i,v in ipairs(days) do  
    print(v) 
end 

输出结果

Suanday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

与ipairs用法相近的迭代器函数是pairs
两者不同在于
ipairs遍历时不能返回nil,只能返回数字0,如果返回nil则会退出,它只能遍历到表中出现的第一个不是整数的key
pairs则是可以遍历表中所有的key,value

遍历时有一点要注意就是
Lua与其他多数语言不同,迭代的下标是从1开始

你可能感兴趣的:(lua入门,lua)