在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
【lua keynote】 1、两个减号是单行注释: -- --[[ 多行注释 多行注释 --]] 1.1、两条语句可以在同一行,并表不需要分号分隔。 a=1 b=a*2 1.2、dofile可以在当前环境中执行一段文件代码。 2、标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上0个或多个字母,下划线,数字(0到9)。 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。 Lua 是一个区分大小写的编程语言。因此在 Lua 中 Runoob 与 runoob 是两个不同的标示符。 3、关键字
4、在默认情况下,变量总是认为是全局的。 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量。 访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。 > print(b) nil > b=10 > print(b) 10 > 如果你想删除一个全局变量,只需要将变量赋值为nil。 b = nil
print(b) --> nil
5、Lua数据类型
我们可以使用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 6、boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是"假",其他的都为"真": Lua 默认只有一种 number 类型 -- double(双精度)类型。 7、字符串操作。 字符串由一对双引号或单引号来表示。也可以用 2 个方括号 "[[]]" 来表示"一块"字符串,[[]]不会解释转义字符。 string1 = "this is string1" string2 = 'this is string2' html = [[ <html> <head></head> <body> <a href="http://www.runoob.com/">菜鸟教程</a> </body> </html> ]] print(html) 字符串连接使用的是 .. > print("a" .. 'b') ab > print(157 .. 428) 157428 > 使用 # 来计算字符串的长度,放在字符串前面 > len = "www.runoob.com" > print(#len) 14 > print(#"www.runoob.com") 14 > 字符串替换 a="one string" b= string.gsub(a, "one", "another") print(a) print(b) tonumber()可以将字符串转换为数字。 tostring()将数字转换为字符串。 8、table操作。 a["x"] 可以缩写为 a.x -- 创建一个空的 table local tbl1 = {} -- 直接初始表 local tbl2 = {"apple", "pear", "orange", "grape"} Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。 -- table_test.lua 脚本文件 a = {} a["key"] = "value" key = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k .. " : " .. v) end 不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。 -- table_test2.lua 脚本文件 local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end #a 受限于nil。 9、function。 在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里: function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) end end print(factorial1(5)) factorial2 = factorial1 print(factorial2(5)) function 可以以匿名函数(anonymous function)的方式通过参数传递: -- function_test2.lua 脚本文件 function testFun(tab,fun) for k ,v in pairs(tab) do print(fun(k,v)); end end tab={key1="val1",key2="val2"}; testFun(tab, function(key,val)--匿名函数 return key.."="..val; end ); 10、x^y是次方计算。 a%b =a-floor(a/b)*b。x%1的结果是x的小数部分,而x-x%1的结果就是其整数部分。x-x%0.01是精确到小数点后两位。 11、==用于相等测试。~=用于不等测试。 如果两个值具有不同的类型,Lua就认为它们不相等。 nil只与自身相等。 or 当第一个操作数为真的,中第一个操作数;否则返回第二个操作数。 13、Lua初始化对象时,先创建对象,再赋值。所以以下代码是有效的。 list=nil for line in io.lines() do list = {next=list,value=line} end 14、do-end用于定义一个程序块。 15、for的3个表达式,在循环开始前一次性求值。循环变量为for的local变量。 pairs遍历表中全部key,value ipairs从下标为1开始遍历,然后下标累加1,如果某个下标元素不存在就终止遍历。这就导致如果下标不连续或者不是从1开始的表就会中断或者遍历不到元素。 16、迭代器有:io.lines、pairs、ipairs、string.gmatch。 |
请发表评论