Lua笔记4-变量,赋值,函数特点
2015-07-27 15:06
351 查看
--[[ String: 运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。 print("10" + 1) --> 11 print("10 + 1") --> 10 + 1 print("-5.3e - 10" * "2") --> -1.06e-09 print("hello" + 1) -- ERROR (cannot convert "hello") 反过来,当Lua期望一个string而碰到数字时,会将数字转成string。 print(10 .. 20) --> 1020 ..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。 尽管字符串和数字可以自动转换,但两者是不同的,像10 == "10"这样的比较永远都是错的。 如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。 line = io.read() -- read a line n = tonumber(line) -- try to convert it to a number if n == nil then error(line .. " is not a valid number") else print(n*2) end 反之,可以调用tostring()将数字转成字符串,这种转换一直有效: print(tostring(10) == "10") --> true print(10 .. "" == "10") --> true --]]
--[[ 赋值: 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略: a. 变量个数 > 值的个数 按变量个数补足nil b. 变量个数 < 值的个数 多余的值会被忽略 例如: 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 多值赋值经常用来交换变量,或将函数调用返回给变量:a, b = f(),f()返回两个值,第一个赋给a,第二个赋给b。 --]] <pre name="code" class="cpp">--[[ Table: 如果真的想要数组下标从0开始: days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} 注意:不推荐数组下标从0开始,否则很多标准库不能使用。 在构造函数的最后的","是可选的,可以方便以后的扩展。 a = {[1]="red", [2]="green", [3]="blue",} 在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。 {x=10, y=45; "one", "two", "three"} --]] --[[ 应该尽可能的使用局部变量,有两个好处: 1. 避免命名冲突 2. 访问局部变量的速度比全局变量更快. 我们给block划定一个明确的界限:do..end内的部分。当你想更好的控制局部变量的作用范围的时候这是很有用的。 do local a2 = 2*a local d = sqrt(b^2 - 4*a*c) x1 = (-b + d)/a2 x2 = (-b - d)/a2 end -- scope of 'a2' and 'd' ends here print(x1, x2) ]] --[[ For循环: 范型for循环: 前面已经见过一个例子: -- print all values of array 'a' for i,v in ipairs(a) do print(v) end 范型for遍历迭代子函数返回的每一个值。 再看一个遍历表key的例子: -- print all keys of table 't' for k in pairs(t) do print(k) end 范型for和数值for有两点相同: 1. 控制变量是局部变量 2. 不要修改控制变量的值 再看一个例子,假定有一个表: days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} 现在想把对应的名字转换成星期几,一个有效地解决问题的方式是构造一个反向表: revDays = {["Sunday"] = 1, ["Monday"] = 2, ["Tuesday"] = 3, ["Wednesday"] = 4, ["Thursday"] = 5, ["Friday"] = 6, ["Saturday"] = 7} 下面就可以很容易获取问题的答案了: x = "Tuesday" print(revDays[x]) --> 3 我们不需要手工,可以自动构造反向表 revDays = {} for i,v in ipairs(days) do revDays[v] = i end --]] --[[ print("===========function =============") local function ftest(table_m ) --当只有一个参数的时候,函数调用可以不用() for k,v in pairs(table1) do print(k,v) -- print("\n"..number1) end end ftest {a=123,b='helloworld'} --可以不带 () --]]
相关文章推荐
- Lua笔记2-string类型
- Lua笔记5-Serialization
- Lua笔记3-table
- Evaluate Reverse Polish Notation
- Lua打印table
- LeetCode(150) Evaluate Reverse Polish Notation
- Lua简明入门实践(从"基"搞起)_(一)Lua集成开发环境
- H264 extractor plugin for Wireshark
- leetcode[150]:Evaluate Reverse Polish Notation
- [lua, mysql] 将多条记录数据组合成一条sql插入语句(for mysql)
- wax框架之Lua call oc
- Vs2012 构建配置 Lua5.2.3
- lua技巧分享之保护执行
- lua 中ipairs 和 pairs 区别
- [Leetcode 150, Medium] Evaluate Reverse Polish Notation
- [LeetCode]Evaluate Reverse Polish Notation
- 使用Lua 局部变量来优化性能,同时比较局部变量和全局变量
- Unicode与UTF-8互转(c语言和lua语言)
- ocp 047-92 Evaluate the following expression using meta. character for regular expression: 4000 '[^Ale|ax
- lua加载csv文件