《Programing in Lua》第一部分:CH1-CH10

CH1: 开始

  • 程序块:Lua执行的每段代码,例如一个源代码文件或在交互模式输入一行代码,也就是一连串的语句或命令(理解这个概念很重要);
  • 小技巧:dofile函数在测试代码时的用处
  • Lua的标识符:
    • 可由任意字母、数字、下划线构成,不能以数字开头避免以一个下划线开头并跟着一个或多个大写字母。
    • 避免以一个下划线开头并跟着一个或多个大写字母的标识符,lua将之保留作他用。
    • 保留字符"_"(仅一个下划线)作为“亚变量”。
  • 注释:
    • --:注释单行
    • --[[  --]], 多行,建议用这种,调试代码的时候方便,只需在前一个前面再加一"-"
  • 解释器程序:
    • 概念:解释器是一个小型的程序(根据其源代码文件,可称"lua.c“),可通过它直接使用Lua。
    • 常用参数:   
      • lua -e  "print("coding direct!")"    ( 用于在命令行中直接输入代码)
      • -l : 加载库文件
      • -i : 表示在运行完其他命令行参数后进入交互模式
      • 直接在解释器中输入"=",可打印任何表达式的值,有助于将Lua作计算器使用  

 


CH2:类型与值 

  •  lua的8种基本类型:nil, boolean, number, string, userdate, function(函数), thread(线程), table
  • 函数是“第一类值(first-class value)“,可像操作其他值一样来操作函数!!
  • number类型用于表示实数(具体见luaconf.h),lua中没有整数的必要.
  • 有趣的技巧:用一对匹配的双方括号界定一个字母字符串,就像写”块注释“,例如:
  • page =
    
    [[
    
    	<html>
    
    	<head>
    
    	<title> An HTML page </title>
    
    	</head>
    
    	<body>
    
    	<a href = "http://www.lua.org">lua</a>
    
    	</body>
    
    	</html>
    
    ]]
    
    

      

  • Lua提供运行时数字与字符串数字自动转换:print("1" + 1)  --> 2
  • ".." :字符串连接操作符,左右要留空
  • tonumber(), tostring()
  • "#":在字符串前放置获取该字符串长度,也可获取数组的长度
  • table是本章的关键也是lua的重点,具体研究,详见:《浅谈Lua中的table》
  • userdata(自定义类型)可将任意的c语言数据存数到lua变量中,thread(线程)具体在“协同程序”中

 


 

CH3:表达式

  • %(取模)小技巧:x%1取小数部分, x-x%0.01精确到小数点后两位
  • 对于table、userdata、函数,lua是做引用比较的,这一点也是很重要的,具体研究,详见:《关于lua中table、userdata、函数的引用的理解》
  • 两种习惯写法:
    •  x = x or v,如可用在没设置x的初值,将其设置为默认值v
    • (a and b) or c 类似于c中的 a?b:c
  • table构造式,也是重点,详见: 《浅谈Lua中的table》

 


 CH4:语句

  • Lua允许多重赋值,比较常见的应用:交换两个变量和手机函数的多个返回值
  •  局部变量与块(对局部变量及其作用域的理解也是比较重要的):
    • 语法:local
    • 作用域:仅限于生命它们的那个块
    • 交互模式中每行内容自身就形成了一个程序块(除非该航内容不足以构成一条完整的程序)
    • do-end
    • 一种习惯写法:local foo = foo,
      • 含义:创建一个局部变量foo,并用全局变量foo初始化 
      • 好处:
        1. 后续程序改变foo,对全局的foo无影响
        2. 加速当前作用域对foo的访问(局部变来那个的访问效率总是要高于全局变量)
    • 与其他多数语言不同,lua中一个声明在循环体重的局部变量的作用域包括条件测试
  • for
    • 数字型for(numbereric for)
      • 语法:”for var = exp1, exp2, exp3 do <执行体> end  “   (exp3为步长,不写默认1)
    • 泛型for(generic for)
      • 标准库提供的迭代器:io.lnes, pairs, ipairs, string.gmatch等,具体研究,详见:《Lua中常用的迭代器

 


CH5:函数

CH6:深入函数

这两个章节都是讲函数的,具体研究,详见:《Lua中的函数浅谈

 


 

CH7:迭代器与泛型for     具体研究,详见:《Lua中的迭代器》

 


 

CH8:编译、执行与错误

  •  何为解释型语言:主要特征并不在于是否能编译它们,而在于编译器是否是语言运行是库的一部分,即是否有能力执行动态生成的代码。dofile等函数的存在,充分说明了Lua是一种解释型语言
  •  dofile、loadstring
  • Lua提供的所有关于动态链接的功能均聚集在一个函数,即package.loadlib, 两个参数如下
    • 动态库的完整路径:local path = "/usr/local/lib/lua/5.1/socket.so"
    • 一个函数名称:loaca f = package.loadlib(path, "luaopen_socket")
  • require
  • pcall
  • error函数
  • 用法:error("there is a error", 2); error("there is a error")
  • 说明:error的第二个附加参数level(层),用于指出应由嗲用层级中的哪个(层)函数来报告当前错误
  • xpcall

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(lua)