Programming in Lua First Edition

Part I · The Language

1 - Getting Started

1.1 Chunks

  • 在lua命令中-l选项会调用require函数
    • e.g. prompt> lua -i -la -lb
    • -i:Lua运行指定代码段后进入交互模式
  • 另一个link外部代码段的方式是使用dofile函数
  • 在调试/测试时使用-idofile非常方便

1.2 Global Variables

1.3 Some Lexical Conventions(词法约定)

  • Lua大小写敏感

  • 以下划线开头的大写字母标识符是Lua保留字的命名风格,因此要避免使用

1.4 The Stand-Alone Interpreter

  • lua [options] [script [args]]

    • -e: 直接将命令传入Lua(e.g. prompt> lua -e "print(math.sin(12))")

    • -l: 使用require加载一个文件

    • -i: 进入交互模式

  • 全局变量arg存放Lua的命令行参数,脚本名索引为0:

    • prompt> lua -e "sin=math.sin" script a b

    • args[-3] = "lua"
      args[-2] = "-e"
      args[-1] = "sin=math.sin"
      args[0] = "script"
      args[1] = "a"
      args[2] = "b"

2 - Types and Values

  • Lua的8个基本类型:nil, boolean, number, string, userdata, function, thread, table

  • type()以字符串形式输出参数的类型

2.1 Nil

2.2 Booleans

  • 在控制结构的条件中,nil和false为假,其他值都为真

2.3 Numbers

  • 表示实数。一般有个错误的看法 CPU 运算浮点数比整数慢。事实不是如此,用 实数代替整数不会有什么误差(除非数字大于 100,000,000,000,000)

  • 数值常量的小数部分和指数部分都是可选的:e.g. 0.3e12, 5e+20

2.4 Strings

  • Lua字符串为byte序列。#运算符总是返回字符串的byte长度,在某些编码下byte长度与字符个数不一致

  • UTF-8编码:

    • 最多用4 byte为一个字符编码

    • 128个US-ASCII字符:1 byte

    • 带有附加符号的英文字符:2 byte

    • 其他基本多文种平面中的字符(大部分常用字,汉字等):3 byte

  • Lua String是不可更改的,可以用新变量存储修改后的字符串

  • Lua可以高效地处理长字符串

  • 转义符:\

  • 运行时,Lua 会自动在String和Number之间自动进行类型转换

2.5 Table

  • table是Lua唯一的数据结构

  • Lua 表总是“匿名”的,表变量只是表本身的一个引用。当程序中的表不再被引用,Lua 的内存管理机制最终会删除表并释放表所占用的内存空间。

  • Lua用1来索引数组的第一个元素

2.6 Function

  • 函数是第一类值(和其他变量相同),所以函数可以存储在变量中,有很大的灵活性

2.7 UserData

2.8 Threads

3 - Expressions

评论

此博客中的热门博文

LuaJIT

Lua Gems