前言

Lua是由标准C实现的解释型语言,它的执行效率比较高,通常作为脚本嵌入到应用程序中。
由于支持热更新,Lua在游戏开发领域应用普遍。作为从业人员,不得不来填这个大坑。
本文是Lua入门学习笔记,来源是泰课的一个Lua教程。这里主要记录Lua的语法,以及实现
简单的OOP。
Lua 快速入门(一)——基础语法
Lua 快速入门(二)——函数(Function)
Lua 快速入门(三)——表(Table)
Lua 快速入门(四)——多脚本执行
Lua 快速入门(五)——协程(thread)
Lua 快速入门(六)——基础OOP


一、变量

Lua原生支持的数据类型共八种
简单变量类型:空值(nil)、数值(number)、字符值(string)、布尔值(boolean)。
复杂变量类型:表(table)、函数(function)、协程(thread)以及用户自定义数据(userdata)
Lua处理表和字符串的效率非常之高,加上元表的支持,开发者可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。

简单变量类型(nil、number、string、 boolean)

Lua是弱类型语言,所有的变量申明都不需要申明变量类型,解析时自动判断类型。
通过 type 函数 ,我们可以得到变量的类型。返回值是一个string类型。

print("**********nil************")
--lua中使用没有声明过的变量
--不会报错 默认值 是nil
print(b)                            --nila = nil
print(a)                            --nil
print(type(a))                      --nil
print(type(type(a)))                --string

Lua中所有数值都是number,其本质是 C 中的 double类型。

print("**********number************")
a = 1
print(a)                            --1
print(type(a))                      --number
a = 1.2
print(a)                            --1.2
print(type(a))                      --number

字符值都是string类型,使用双引号或者单引号包裹。Lua中没有char类型。

print("**********string************")
str = "双引号字符串"
str2 = '单引号字符串'--获取字符串的长度
print("**********字符串长度************")
s = "aBcdEfG字符串"
--不同编码汉字所占长度不同 2-4(UTF-8中占3个)
--英文字符 占1个长度
print(#s)                   --16print("**********字符串多行打印************")
--lua中也是支持转义字符的
print("123\n123")s = [[使用
多行
打印
]]
print(s)print("**********字符串拼接************")
--字符串拼接 通过..
print( "123" .. "456" )             --123456
s1 = 111
s2 = 222
print(s1 .. s2)                     --111222    print(string.format("我是Canon,我今年%d岁了", 18))
--%d :与数字拼接
--%a:与任何字符拼接
--%s:与字符配对
--.......
print("**********别的类型转字符串************")
a = true
print(tostring(a))                  --trueprint("**********字符串提供的公共方法************")
str = "AbCdefg"
--小写转大写的方法
print(string.upper(str))            --ABCDEFG
--大写转小写
print(string.lower(str))            --abcdefg
--翻转字符串
print(string.reverse(str))          --gfedCbA
--字符串索引查找(这里返回两个值,表示开始和结束位置)
print(string.find(str, "Cde"))        --3       5
--截取字符串
print(string.sub(str, 3, 4))        --Cd
--字符串重复(不咋用到)
print(string.rep(str, 2))           --AbCdefgAbCdefg
--字符串修改(这里返回两个值,第一个是修改后的字符串,第二个是修改的次数)
print(string.gsub(str, "Cd", "**")) --Ab**efg 1--字符转 ASCII码 (将字符串中第几个字符转ASCII码)
a = string.byte("Lua", 1)            --76
print(a)
--ASCII码 转字符
print(string.char(a))               --L

布尔类型boolean

print("**********boolean************")
a = true
print(a)                            --true
a = false
print(a)                            --false
print(type(a))                      --boolean

二、运算符

Lua支持 +,-, *, /, %, ^等运算符。
不支持自增和自减,也不支持+= ,-= ,/= …等复合运算符。

print("**********算数运算符************")
--字符串 可以进行 算数运算符操作 会自动转成number
print("加法运算" .. 1 + 2)
a = 1
b = 2
a = a + b
a = a + 1
print(a + b)                   --6
print("123.4" + 1)               --124.4print("减法运算" .. 1 - 2)
print("123.4" - 1)                --122.4print("乘法运算" .. 1 * 2)
print("123.4" * 2)                --246.8print("除法运算" .. 1 / 2)
print("123.4" / 2)                --61.7print("取余运算" .. 1 % 2)
print("123.4" % 2)                --1.4--^ lua中 该符号 是幂运算
print("幂运算" .. 2 ^ 5)
print("123.4" ^ 2)                --15227.56print("**********条件运算符************")
-- > < >= <= == ~=
print(3>1)                       --true
print(3<1)                       --false
print(3>=1)                     --true
print(3<=1)                     --false
print(3==1)                       --false
--不等于 是 ~=
print(3~=1)                        --trueprint("**********逻辑运算符************")
--与   或   非
--and  or  not
print( true and false)          --false
print( true and true)           --true
print( false and true)          --false
print( true or false)           --true
print( false or false)          --false
print( not true)                --falseprint("**********位运算符************")
-- & | 不支持位运算符 需要我们自己实现print("**********三目运算符************")
-- ? :  lua中 也不支持 三目运算
-- lua中除了nil 和 false,其他值均判断为 true
-- 利用这个特性可以实现类似三目运算符的效果
if() and () or ()

三、流程控制语句

条件分支语句 if,不支持switch语句

print("**********条件分支语句************")
a = 9
--if 条件 then.....end
--单分支
if a > 5 thenprint("123")
end--双分支
-- if 条件 then.....else.....end
if a < 5 thenprint("123")
elseprint("321")
end--多分支
-- if 条件 then.....elseif 条件 then....elseif 条件 then....else.....end
if a < 5 thenprint("123")
elseif a == 6 thenprint("6")
elseif a == 7 thenprint("7")
elseprint("other")
endif a >= 3 and a <= 9 thenprint("3到9之间")
end--lua中没有switch语法  需要自己实现

循环控制语句 while ,repeat,for

print("**********while语句************")
num = 0
--while 条件 do ..... end
while num < 5 doprint(num)num = num + 1
end
print("**********do while语句************")
num = 0
--repeat ..... until 条件 (注意:条件是结束条件)
repeatprint(num)num = num + 1
until num > 5 --满足条件跳出 结束条件print("**********for语句************")for i =2,5 do --默认递增   i会默认+1print(i)
endfor i =1,5,2 do --如果要自定义增量 直接逗号后面写print(i)
endfor i =5,1,-1 do --如果要自定义增量 直接逗号后面写print(i)
end

总结

Lua是弱类型的脚本语言,语法看起来和JavaScript有点相似,还是挺容易上手的。

Lua 快速入门(一)——基础语法相关推荐

  1. 【C++快速入门】基础语法篇

    C++基础语法 C++介绍 cin.cout 函数重载(Overload) 默认参数 extern "C" #pragma once 内联函数(inline function) 内 ...

  2. Kotlin快速入门:基础语法、类与继承、集合

    参考书籍: <AtomicKotlin>,全英文,读起来慢,但是写得很详细,没有任何语言基础的也能看懂 <第一行代码 Android 第三版>,第二章,有java基础的看一看就 ...

  3. 【校招Verilog快速入门】基础语法篇:VL1、四选一多路器

    文章目录 一.题目 二.题解 一.题目 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 波形示意图: 输入描述: ...

  4. MVEL快速入门—MVEL基础语法讲解(一)

    概述 MVEL是从英文翻译而来的,MVFLEX表达式语言是Java平台的动态/静态混合类型的运行时可嵌入表达式语言.该项目最初是作为应用程序框架的实用语言开始的,现在已完全独立开发.MVEL通常用于通 ...

  5. 【Golang 快速入门】高级语法:反射 + 并发

    Golang 快速入门 Golang 进阶 反射 变量内置 Pair 结构 reflect 结构体标签 并发知识 基础知识 早期调度器的处理 GMP 模型 调度器的设计策略 并发编程 goroutin ...

  6. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  7. Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)

                            <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探 ...

  8. 【JAVA学习】1、零基础入门Java 基础语法:概念、规则、格式

    [JAVA学习]1.零基础入门Java 基础语法 前言 JAVA开发环境选择 Java 基础概念 Java 标识符 Java修饰符 基础代码模板框架 命名规则 基础规则 后端开发规则 代码格式 前言 ...

  9. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

最新文章

  1. Linux运维跳槽必备的40道面试精华题
  2. ELK 处理 Spring Boot 日志,妙!
  3. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.4. 值存储
  4. boost::safe_numerics::automatic相关的测试程序
  5. html 实现表格控制器,HTML 表格类 - CodeIgniter 2.x 用户手册
  6. 准确性 敏感性 特异性_如何掌握类型特异性的艺术
  7. VBS使文本框的光标位于所有字符后
  8. alternatives命令用法
  9. dnn模型 list index out of range_通过MalConv模型实现恶意软件的分类
  10. boost1.55.0在vs2013上编译序列化库失败的解决方法
  11. javascript面向对象技术基础
  12. springmvc配置servlet
  13. SuspendLayout,ResumeLayout,Layout,PerformLayout
  14. bt种子爬虫程序和种子解析(大蟒蛇语言编写)
  15. 2018百度之星程序设计大赛初赛B——1002hex
  16. [Excel]VBA编程入门基础知识
  17. iOS支付知识及调试技巧:【支付流程 预授权 银行卡验证反洗钱敏感信息的脱敏规范】2、安全设计Checklist(短信验证码、图形验证码、密码管理、身份验证、会话安全、敏感信息、接口安全)
  18. Linux 4G/5G 驱动移植、实践测试记录
  19. freenom域名申请教程
  20. Spring Cloud Gateway Session

热门文章

  1. 张有为/开创博客营销-中小企业网上生态全景调查(节选)
  2. Golang json 中文marshal
  3. 我的世界正版怎么进入hyp服务器,《我的世界》【PC】版Hypixel服务器会员系统、商店功能、家园系统9月26日上线啦~...
  4. Python多列同时处理
  5. 逼空大战收尾,散户最终还是为机构做了嫁衣?
  6. php5.3配置SQL Server数据库
  7. python if elif用法_Python elif 条件判断-python if elif-python else if-Python elif使用-嗨客网...
  8. mqtt服务器搭建php,MQTT 服务端
  9. android 开发必备软件
  10. python快速排序法实现