Skip to content

Latest commit

 

History

History
129 lines (95 loc) · 4.99 KB

File metadata and controls

129 lines (95 loc) · 4.99 KB

1 - Lua 语言入门

Lua 的下载与安装

为了编译(注:Lua 本身是一门解释型语言,这里的编译指的是生成 bytecode)和执行 Lua 代码,首先需要获取 Lua 的编译器 luac 以及解释器 lua

考虑到兼容性,这里直接从源码进行编译。

  • Windows
    • 安装 mingw 并配置必要的环境变量
    • Lua: download 下载最新的源码压缩包并解压
    • 打开根目录下的 Makefile,将 PLAT= guess 修改为 PLAT= mingw
    • 打开 CLI,执行命令 make
    • src 目录下生成的三个文件 lua.exeluac.exelua54.dll 移动到合适的地方
  • Linux
    • 使用 sudo apt install lua5.4

    • 或使用官方提供的 shell 脚本:

      curl -L -R -O https://www.lua.org/ftp/lua-5.4.7.tar.gz
      tar zxf lua-5.4.7.tar.gz
      cd lua-5.4.7
      make all test

然后配置好环境变量(如果必要)。

在 CLI 执行 lua -v 以验证安装是否成功,在我的电脑上,输出 Lua 5.4.7 Copyright (C) 1994-2024 Lua.org, PUC-Rio

交互模式

  • Lua 解释器 lua 支持类似 python 的交互模式:在 CLI 下执行 lua 即可
  • 在交互模式下,所有输入的代码在按下回车后都会被立即执行
  • 可以通过 os.exit() 退出交互模式,或者使用 CTRL+Z(Windows)或 CTRL+D(Linux)

Windows 下:

  • CTRL+C:向当前进程发送 SIGINT,中断当前进程
  • CTRL+Z:向当前进程发送 EOF,代表输入结束
  • CTRL+D:无特殊用途

Linux 下:

  • CTRL+C:向当前进程发送 SIGINT
  • CTRL+Z:向当前进程发送 SIGTSTP,暂停当前进程,可使用 SIGCONT 恢复
  • CTRL+D:向当前进程发送 EOF,代表输入结束

执行 Lua 代码文件

  • 输入 lua <代码文件路径> 以执行预先写好的 Lua 代码文件
  • 输入 lua -i <代码文件路径> 以执行预先写好的 Lua 代码文件,并在执行完毕后进入交互模式,这样就能查看代码执行完毕后各变量的值,对于调试会很有帮助
  • 在交互模式下,执行 dofile("<代码文件路径>") 也能实现同样的效果

标识符

  • 标识符是由任意英文字母、数字和下划线组成的、大小写敏感的字符串,并且不能以数字开头
  • 标识符也不能与 Lua 保留字(关键字)重名,具体可参照官方文档
  • 下划线 + 大写字母的标识符具有特殊用途(如 _VERSION 表示当前 Lua 的版本)

注释

  • 使用 -- abcdefg 进行单行注释

  • 使用 --[[ abcdefg ]] 进行多行注释

  • 小技巧:可以使用

    --[[ 
    abcdefg 
    --]]

    进行多行注释,这样只需要在最前面加一个 - 就能便捷地取消注释。

分号

分号在 Lua 中并不是必需的,但加上也不会有问题。

全局变量

  • b = 10 将创建一个值为 10 的全局变量 b,其作用域为整个代码文件,可以在该文件的任何地方使用(前提是局部作用域中没有定义重名的变量)
  • 如果不对其赋值,或手动赋值为 nil,则其值为 nil,此时 Lua 的 GC 会自动回收其内存

类型和值

  • Lua 是一种动态类型语言,即,类型信息被存储在值中,而不是与变量相关联
  • 总共有 8 种基本类型:
    • nil
    • boolean
    • number
    • string
    • userdata:对应 C 语言中的 void* 类型,用于保存任意的 C 语言数据
    • function
    • thread
    • table
  • 可以使用 type 函数来获得一个值的类型

nil 类型

  • 使用 nil 类型来表示一个无效值
  • 具有该值的变量不会占用内存(其内存会自动被 GC 回收)

boolean 类型

  • truefalse 属于 boolean 类型
  • 注意,在条件测试中,除了 falsenil 以外的值都被认为是真(包含零以及空字符串),这一点和 C 语言的行为不同

逻辑运算符 notandor

  • not 永远返回 boolean 类型的值
    • 根据上面的说明,not 0 的结果为 false
  • and 遵循短路求值原则,当第一个操作数为真时,返回第二个操作数;否则返回第一个操作数
  • or 遵循短路求值原则,当第一个操作数为真时,返回第一个操作数;否则返回第二个操作数

利用上述性质,可以优雅地实现许多简单的功能,如:

  • C 语言中的 max(x, y) 等价于 (x > y) and x or y
    • 实际上这是一种三目运算符的通用表示方法
    • 对于 a ? b : c
    • 在 Lua 中可以写成 a and b or c
  • x = x or vx 未被初始化时将其设置为 v,否则不操作

传递命令行参数

  • 可以在执行代码时传递命令行参数: lua <代码文件路径> a b c

  • 解释器会创建一个名为 arg 的表,其内容如下:

    arg[-1] = "lua"
    arg[0] = "<代码文件路径>"
    arg[1] = "a"
    arg[2] = "b"
    arg[3] = "c"