lua语言入门、安装环境、基础语法、编写第一个lua程序 hello world

发布时间:2024-04-24 16:19:02 作者:yexindonglai@163.com 阅读(221)

lua介绍

Lua 是一种轻量级、高效、可扩展的脚本编程语言。它由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)的一个研究小组于1993年开发而成。Lua 的设计目标是提供一个简单、可嵌入和可扩展的脚本语言,用于嵌入到其他应用程序中,或用于独立开发脚本驱动的应用程序。

以下是一些关于 Lua 的特点和用途:

  • 简洁和易学:Lua 的语法简洁明了,易于学习和使用。它采用了类似于 Pascal 的块结构和词法作用域,并提供了一组简单而强大的语言构造。

  • 轻量级和高效:Lua 的执行引擎非常轻量级,具有快速的解释执行速度和低内存占用。这使得 Lua 成为嵌入式系统和资源受限环境中的理想选择。

  • 可嵌入性:Lua 可以轻松嵌入到其他应用程序中作为脚本语言使用。许多游戏引擎和应用程序框架都集成了 Lua,允许开发人员使用 Lua 进行自定义脚本编程。

  • 可扩展性:Lua 提供了强大的扩展机制,允许开发人员通过编写 C/C++ 扩展模块来扩展 Lua 的功能。这种扩展性使得 Lua 能够与现有系统和库进行无缝集成。

  • 多领域应用:Lua 在游戏开发、嵌入式系统、网络应用、脚本驱动的工具开发和配置文件等领域得到广泛应用。它还被广泛用于游戏脚本编程、服务器端脚本编程和快速原型开发等方面。

总的来说,Lua 是一种灵活、简洁且功能强大的脚本编程语言,适用于各种应用场景。

安装lua

windows安装

下载 lua : https://github.com/rjpcomputing/luaforwindows/releases
windwos版本,下载打开后一直点next即可安装完成,完全傻瓜式;

ubuntu安装

  1. # 下载源码
  2. wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
  3. # 解压
  4. tar xzvf lua-5.4.4.tar.gz
  5. #进入目录
  6. cd lua-5.4.4/
  7. # 编译
  8. root@PAw9033927:~/lua-5.4.4# make all
  9. make[1]: Entering directory '/root/lua-5.4.4/src'
  10. Guessing Linux
  11. make[2]: Entering directory '/root/lua-5.4.4/src'
  12. make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
  13. make[3]: Entering directory '/root/lua-5.4.4/src'
  14. make[3]: Nothing to be done for 'all'.
  15. make[3]: Leaving directory '/root/lua-5.4.4/src'
  16. make[2]: Leaving directory '/root/lua-5.4.4/src'
  17. make[1]: Leaving directory '/root/lua-5.4.4/src'
  18. # 安装
  19. root@PAw9033927:~/lua-5.4.4# make install
  20. cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.4 /usr/local/lib/lua/5.4
  21. cd src && install -p -m 0755 lua luac /usr/local/bin
  22. cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h lua.hpp /usr/local/include
  23. cd src && install -p -m 0644 liblua.a /usr/local/lib
  24. cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
  25. # 查看安装结果, 如果没有反应,将当前bash窗口关掉在重新打开一个新的bash窗口,然后再输入以下命令
  26. root@PAw9033927:~/lua-5.4.4# lua -v
  27. Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio

第一个hello world

创建一个 main.lua 文件,内容如下

  1. print("hello world)

执行lua

  1. C:\Program Files (x86)\Lua\5.1\lua.exe main.lua

在idea 上运行lua

先安装lua插件

在创建工程时,就会看到lua的选项

给lua工程起个名称

创建完成后如下图

新建lua文件

代码写好后,首次运行需要做一些配置

配置信息如下

运行后如下图

lua 基础语法

print 控制台输出

  1. print("hello world")

基本数据类型

  1. -- 数值
  2. local num = 1 -- number
  3. local num = 1.0009999 -- number
  4. -- 字符串
  5. local str = "hello" -- string
  6. -- 布尔
  7. local bool = false -- boolean
  8. -- 表,用来表示数组、map object
  9. local bool = {"1","2"} -- table
  10. -- 默认情况下是nil
  11. local nil_var = nil -- nil 表示无效的值,和javanull 有区别,相当于javafalse
  12. local invalid_var -- 当一个变量未赋值,它的默认值就是 nil

type 函数,输出数据类型

  1. print(type("i love you")) -- string
  2. print(type(false)) -- boolean
  3. print(type(nil)) -- nil
  4. print(type(1)) -- number
  5. print(type(1.111)) -- number
  6. print(type(type)) -- function

if语法

  1. local var =true
  2. if var then
  3. print("条件为真")
  4. end

if语法注意事项

在 Lua 中,只有 nil 和 false 为假,其他都为真,包括 0 和空字符串也为真。

这种判断方式和很多常见的开发语言并不一致,所以,为了避免在这种问题上出错,可以显式地写明比较的对象,比如下面这样:

  1. local a = 0
  2. if a == false then
  3. print("true")
  4. end

if else

  1. if false then
  2. print("条件为真")
  3. else
  4. print("条件为假")
  5. end

if elseif

  1. local ifA = 21;
  2. if ifA == 1 then
  3. print("为1")
  4. elseif ifA == 2 then
  5. print("为2")
  6. elseif ifA == 3 then
  7. print("为4")
  8. else
  9. print("啥也不是")
  10. end

while 循环

while判断条件为ture时会一直执行do循环体的语句

  1. local num = 0;
  2. while (num < 20)
  3. do
  4. print("current num"..num)
  5. num =num+1
  6. end

打印结果如下

  1. current num0
  2. current num1
  3. current num2
  4. current num3
  5. current num4
  6. current num5
  7. current num6
  8. current num7
  9. current num8
  10. current num9
  11. current num10
  12. current num11
  13. current num12
  14. current num13
  15. current num14
  16. current num15
  17. current num16
  18. current num17
  19. current num18
  20. current num19

for循环

  1. -- for循环
  2. -- i=1 声明变量
  3. -- 10 i只要不超过10,就会一直执行do循环体的语句,
  4. -- 2 i每次递增的数量
  5. for i = 1, 10 ,2
  6. do
  7. print("i的值为"..i)
  8. end

打印结果如下

  1. i的值为1
  2. i的值为3
  3. i的值为5
  4. i的值为7
  5. i的值为9

repeat ..until() 满足条件结束

  1. local c = 1
  2. repeat
  3. print("c的值:"..c)
  4. c = c+1
  5. until(c<10) -- 当条件为true时结束循环,否则一直执行循环体的内容

function 函数

  1. function add(a,b)
  2. return a + b
  3. end
  4. -- 调用函数
  5. print(add(1,2))

拼接

  1. -- 两个点 .. 表示拼接
  2. print("hello".." world!!!!")
  3. local age = 6
  4. print("我已经"..age.."岁了")

不能拼接nil值,会报错,比如以下代码

  1. local nil_con = nil
  2. print("nil_con的值为:"..nil_con)

报错信息

  1. C:\Program Files (x86)\Lua\5.1\lua.exe: Main.lua:114: attempt to concatenate local 'nil_con' (a nil value)
  2. stack traceback:
  3. Main.lua:114: in main chunk
  4. [C]: ?

table 表

  1. local table = {} -- 初始化表
  2. table[1] = 1 --给表赋值
  3. table["key"] = "val"
  4. -- 表取值
  5. print("1的位置值为:"..table[1])
  6. print("key的位置值为:"..table["key"])
  7. --print("key1的位置值为:"..table["key1"]) -- 获取一个不存在的值会报错
  8. -- 移除引用
  9. table = nil
  10. --print("1的位置值为:"..table[1])-- 因为上面已经移除了表的引用,在这里取值会报错

module 模块

模块相当于一个封装库, 也可以理解为是java的一个class,
从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度

新建一个模块 module.lua

  1. -- 定义一个名为module的模块
  2. module = {}
  3. -- 定义一个常量
  4. module.constant = "this is constant"
  5. -- 定义私有函数,只能在内部调用
  6. local function private_func(a)
  7. print("调用了私有函数"..a)
  8. end
  9. -- 定义一个函数
  10. function module.fun(a)
  11. print("a的值为:"..a)
  12. private_func(a)
  13. end
  14. -- 一定要return出去,否则其他地方无法调用
  15. return module

模块使用

在另一个文件中,使用 require 引入模块,以下2种引入方式都可以

  1. require("module")
  2. require "module"

调用模块成员

  1. -- 调用模块的函数
  2. module.fun("yexindong")
  3. -- 打印模块的常量
  4. print(module.constant)

关键字Lua