Lua是一门语言,我们可以使用一个库,可以在运行时去编译执行Lua中的代码,从而实现自己的内存中的数据和逻辑;

准备学习环境:

新建一个Lua项目目录,用来写我们的Lua代码;

进入目录,右键使用vsCode打开 或者,先打开vsCode,然后 文件->打开文件夹 ,选择我们的项目目录;

为vsCode安装Lua相关的插件Lua(Lua Language Server coded by Lua)LuaDebug插件

执行Lua

按Ctrl + J,打开控制台,输入命令:Lua 文件名.Lua

local:

代表变量,只能在当前chunk(块)中访问到

不加local的变量:

代表变量,默认情况下是全局可以访问

数字 :整数和浮点数 都是number类型

函数:

重点是得理解,函数的定义,和函数的执行 是两码事

定义,只是在内存中生成了这个函数对象

执行,才是真正去执行函数中代码

块(Chunk)

可以认为是是一个局部的环境;一个函数就是一个块,一个Lua脚本(模块)就是一个块;do .. end 也是一个块

local 只能在当前块中访问

访问的变量不存在时,不会报错,而是把这个变量当前nil处理

表:

可以把表当成一个容器,这个容器由两部分组成,字典和list

表里可以放任何东西

没有键的数据,会放到list中,有键的放到字典中;key,可以是任何类型除了nil以外

如果key是数字必须 这样写:t={[3]=4}

Lua中,数组是从1开始索引的,不是从0开始的

遍历表

使用ipairs遍历 数组部分

数组部分的元素会被nil截断;ipairs会无法遍历nil以后的数据

#可以获取数组的长度,但是如果倒数第二个索引为nil,那么#就不会获取最后这两个数据的长度了

所以,不要使用nil来删除数组中的元素

使用table库来操作表

使用pairs遍历 所有数据

字典部分,如果值为nil,就相当于删除了这个数据

访问一个变量时,先查询 当前块中的局部变量,如果查询 不到,会查询 上一级(upValue)中的该变量,依次类推,直到查询到全局变量为止;

Lua中没有+=

使用~= 代替!=

使用 not and or 代替 && ||

先计算not再计算and,最后是or

在Lua中,false和nil,都当作false做逻辑运算

io.read(获取键盘输入)和多重返回值

数据类型:

在Lua中,只有table和字符串,是引用类型;

number是双精度的实浮点型

闭包:

当一个内部函数,引用了外部函数的一个局部变量时,那么就会形成闭包;

因为这个局部变量,不会再被外界访问到;只有该函数自己可以访问;

可以理解为,每个函数对象定义时,会有一个上值(环境表),这个上值中,会储存这个函数所引用的数据;

元表:

Lua中每个对象都可以有个元表,也可以没有;我们现在关注表的元表就可以了;

setmetatable(设置元表)

getmetatable(访问元表)

可以使用t.name直接访问表t中name的key,不需要 t["name"]

元方法:

在元表中方法,以__开头的方法,都是元方法

元方法,是Lua内置定义的名字,你不能自己定义

__index:当你访问一个表t1不存在的key时,会查询 t1的元表t2中的__index指向的方法

__newindex:当你写入一个表t1不存在的key时,会调用t1的元表t2中的__newindex指向的方法

模块:

在Lua中,一个Lua文件对应的块,就是模块

可以使用require去加载模块到内存中

require返回的是模块最后return的结果,默认返回true

require一个模块多次,模块中的代码,只会执行一次,并且会返回之前require的结果

local只能在当前块中访问,模块也是一个块儿

总是需要一个入口模块来启动Lua,有点像我们C#中的Main函数的作用

面向对象

使全局变量定义一个对象,并且在方法内部使用这个全局变量引用这个变量,会造成强关联

我们可以定义方法时,将对象本身作为第一个参数传入,在函数内部使用这个参数去操作对象

语法糖

function Account:WithWindow1(v)
self.balance = self.balance - v
end

当给一个表使用冒号定义一个方法时,相当于自动为该方法添加了一个self作为形参

Account:WithWindow1(100)

当一个表使用冒号来调用一个方法时,相当于把自己作为第一个参数,传到方法中使用

对象将元表设为自己的类表,类表的index指向本类表;那么将来访问对象的方法时,就会访问到这个类表中的方法

静态方法

当类表作为调用者时,这个方法就是静态的方法,静态方法和实例方法在表示上没有区别

Lua基础语法学习笔记的更多相关文章

  1. Python 基础语法学习笔记

    以下运行结果均通过Python3.5版本实测! 1.列表转换为字典 a = ['a', 'b'] b = [1, 2] c = ['c','d'] print (dict([a,b,c])) 输出结果 ...

  2. 毕业设计 之 五 PHP语法学习笔记

    毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...

  3. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

  4. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  5. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  6. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  7. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  8. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

  9. Python 基础语法学习(第一讲)---类的使用

    [写在前面]:其实自学python有一段时间了,但是一直没想起来要写博客来记录自己的学习,今天才感觉要写点什么让自己学的更扎实一点,所以从今天开始更新python自学系列,希望看见文章的大佬们可以指点 ...

  10. Java基础语法学习

    Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...

随机推荐

  1. Jmeter添加BeanShell后置处理程序保存响应结果

    对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型). 那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件名和后缀. imp ...

  2. JS缓存三种方法_sessionStorage_localStorage_Cookie

    1.sessionStorage:临时的会话存储 只要当前的会话窗口未关闭,存储的信息就不会丢失,即便刷新了页面,或者在编辑器中更改了代码,存储的会话信息也不会丢失. 2.localStorage:永 ...

  3. Python从list中随机取值

    import random idList = ['11', '22', '23', '34', '35', '14', '45', '66', '88', ] def get_randomID(): ...

  4. OpenCV实战之文档扫描判卷

    import cv2 import numpy as np #图像显示 def cv_show(imgname,img): cv2.imshow(imgname,img) cv2.waitKey(0) ...

  5. 【python】第二模块 步骤一 第一课、MySQL的介绍

    第一课.MySQL的介绍 一.课程介绍 1.1 课程介绍 学习目标 了解关系型数据库的重要性 为什么会出现关系型数据库? 有哪些常见的关系型数据库? 掌握MySQL的安装和配置 怎么安装MySQL数据 ...

  6. 2023.1.21 app后端pyinstaller启动

    1.打包后会在dist文件夹中暂时生成一个新的文件目录,点击app.exe后也是在这个暂时的文件目录下读取文件的,所以需要以下代码拷贝添加原始项目中的文件 pyinstaller -D app.py ...

  7. vue上传图片组件

      <template> <!-- 上传控件 用法: <upload-widget v-model="imgUrl"></upload-widg ...

  8. python 如何实现多线程

    今天本来打算学习学习多进程的,但是由于我现在的电脑没有Linux系统,无法通过Linux系统编辑一些多进程的程序,因此我打算从多线程入手. 多线程 我们的程序一般都是多任务的,如果你没有好好的利用好, ...

  9. Shell写脚本关于ssh执行jar包,需要刷新JDK路径的问题

    比如脚本中下面这一段 ssh $i "java -jar /applog/$PROJECT/$APPNAME --server.port=$SERVER_PORT >/dev/null ...

  10. obj文件格式解读

    学习了很长一段时间的建模,obj文件一直都在使用,但是却很少去研究过,只是知道这是软件之间的通用格式,直到最近因为刚好要在python中加载obj文件,才发现原来obj文件是如此的有规律 随便用记事本 ...