lua读书摘要01

 

  
  
  
  
  1. 1, Chunks  
  2.     交互模式下的每一行都是可以算做一个块  
  3.     dofile加载的文件算做一个块  
  4.     -l加载的算是一个块  
  5.  
  6. 2, lua -i -e "print(math.sin(12))" -la -lb  
  7.    -i 进入交互模式  
  8.    -e 传入命令  
  9.    -l 加载文件块(lua会调用require)  
  10.  
  11. 3, lua =e "sin=math.sin" script a b  
  12.    arg[-3] = "lua"  
  13.    arg[-2] = "-e"  
  14.    arg[-1] = "sin=math.sin"  
  15.    arg[0] = "script"  
  16.    arg[1] = "a"  
  17.    arg[2] = "b"  
  18.  
  19. 4, Booleans   
  20.     只有false和nil为假,其他值都为真  
  21.  
  22. 5, nil 也是一种类型  
  23.    其他的类型有string,number,function,boolean,userdata,thread,table  
  24.  
  25. 6, 多行字符串可以用[[ ]], 括号中的字符无视转义字符, 除了字符里面包含了[[]]  
  26.    如果要无视[[]]则应该要用, [=====[ ]=====]  
  27.  
  28. 7, 转义  
  29.     \a  
  30.     \b  
  31.     \f   换页  
  32.     \n  
  33.     \r  
  34.     \t  
  35.     \v  
  36.     \\  
  37.     \"  
  38.     \'  
  39.     \[  
  40.     \]  
  41.     \ddd  可以用数字表示字母  
  42.  
  43. 8, 关系运算符中的不等于符号 ~=  
  44.    if not x then .... end  
  45.  
  46. 9, 短路逻辑  
  47.    //假短路  
  48.    a and b --如果a为false, 则返回a, 否则返回b  
  49.    //真短路  
  50.    a or b  --如果a为true, 则返回a, 否则返回 b  
  51.    and的优先级比or高  
  52.  
  53.    (a and b) or c 等价于c中的 a? b: c  
  54.    xx = x or v     等价于if not x then x = v end  
  55.  
  56. 10, 表构造及简略  
  57.     -- 通过Page[1], Page[2]  
  58.     Page = {[1] = "green", [2] = "red"}   
  59.     --Page.x, Page.y或者Page["x"], Page["y"]  
  60.     Page = {["x"] = "green", ["y"] = "red"}  
  61.     --Page[1], Page[2]  
  62.     Page = {"green", "read"}  
  63.     --Page.x, Page.y或者Page["x"], Page["y"]  
  64.     Page = {x = "green"y = "red"}  
  65.     --Page.x, Page.y, Page[1],Page[2] 或者 Page["x"], Page["y"], Page[1], Page[2]  
  66.     Page = {x = "green"y = "red", "green", "red"}  
  67.     --Page.x, Page.y 或者Page["x"], Page["y"]  
  68.     green = 5red = 8;  
  69.     Page = {x = greeny = red};  
  70.  
  71. 11, 语句简略  
  72.     x,yy = y,x   语句等价于交互x与y的值  
  73.     Lua的变量赋值策略:  
  74.     a. 变量个数 > 值的个数     按变量个数补足nil  
  75.     b. 变量个数 < 值的个数     多余的值会被忽略  
  76.  
  77. 12, 语句块简略  
  78.     while 条件 do 语句 end  
  79.     if 条件 then 语句 else 语句 end  
  80.     do 语句 end  
  81.     详细=  
  82.     条件:  
  83.     if conditions then  
  84.     then-part  
  85.     end;  
  86.       
  87.     if conditions then  
  88.     then-part  
  89.     else  
  90.     else-part  
  91.     end;  
  92.       
  93.     if conditions then  
  94.     then-part  
  95.     elseif conditions then  
  96.     elseif-part  
  97.     else  
  98.     else-part  
  99.     end;  
  100.       
  101.     循环:  
  102.     while condition do  
  103.     statements;  
  104.     end;  
  105.  
  106.     repeat  
  107.     statements  
  108.     until conditons;  
  109.    
  110.     --表达式只会计算一次,并且是在循环开始前  
  111.     --循环开始后不要改变循环变量  
  112.     for var=exp1,exp2,exp3 do --exp1->exp2 以exp3为step, 默认exp3为1  
  113.     loop-part  
  114.     end  
  115.  
  116.     流程控制:  
  117.     break和return语句, 只有块末尾或者是end前才能使用  
  118.  
  119. 13, 迭代器  
  120. 例1:  
  121. page = {"1", "2", "3", "4", "5"}  
  122. function _fx(t, i)  
  123.     local n = table.getn(t)  
  124.     if tonumber(i) < n then  
  125.         ii = i + 1  
  126.         return t[i]  
  127.     else  
  128.         return nil  
  129.     end  
  130. end  
  131. for i in  _fx, page, 0  do  
  132.     print(i)  
  133. end  
  134.  
  135. 例2:  
  136. page = {"1", "2", "3", "4", "5"}  
  137. function _f(t, i)  
  138.     local n = table.getn(t);  
  139.     return function ()  
  140.     if i < n then  
  141.         ii = i + 1  
  142.         return page[i]  
  143.     else  
  144.         return nil;  
  145.     end  
  146.     end  
  147. end  
  148. for i in _f(page, 0) do  
  149.     print(i)  
  150. end  
  151.  
  152. 1,初始化,计算in后面表达式的值,表达式应该返回范性for需要的3个值:  
  153. 迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个  
  154. 自动用nil补足,多出的部分会被忽略  
  155.  
  156. 2, 将状态常量与控制变量作为参数调用迭代函数  
  157.  
  158. 3, 将迭代函数返回的值赋予给变量列表(变量列表中,第1个变量为控制变量)  
  159.  
  160. 4, 如果返回的第1个值为nil循环结束,否则执行循环体  
  161.  
  162. 5, 跳到步骤2,再次调用迭代函数  
  163.  
  164. 无状态迭代器:  
  165. a = {"one", "two", "three"}  
  166. for i,v in ipairs(a) do  
  167.     print(i, v)  
  168. end  
  169. 实现常用迭代器:  
  170. function iter(a, i)  
  171.     ii = i + 1  
  172.     local v = a[i]  
  173.     if v then  
  174.         return i,v  
  175.     end  
  176. end  
  177.  
  178. function ipairs(a)  
  179.     return iter, a, 0  
  180. end 

 

你可能感兴趣的:(职场,lua,笔记,休闲)