Lua 学习记录

Stella981
• 阅读 771

Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开

赋值语句右边的值会依次赋给左边的变量

a,b = 1,2

赋值语句会先计算右边所有的值然后再执行赋值操作

x = 1;y = 2
x, y = y, x

变量个数>值的个数 按变量个数补足 nil 变量个数<值的个数 多余的值会被忽略

a, b, c = 0  //0 nil nil 不是想象中的 0 0 0

使用 local 创建一个局部变量,局部变量只在被声明的那个代码块内有效。

代码块:指一个控制结构,一个函数体,或者一个chunk (do..end 内的部分)

应该尽可能的使用局部变量:

1. 避免命名冲突

2. 访问局部变量的速度比全局变量更快.

控制结构的条件表达式结果可以是任何值,Lua 认为 false 和 nil 为假,其他值为真。

函数语法:

function func_name (arguments-list) 
    statements-list; 
end;

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。

当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()是可选的

print "message"
type  "message"

Lua 函数可以返回多个值   如下例返回字符串匹配开始与结束下标

startPoint, endPoint =  string.find("hello Lua users", "Lua")

Lua 会首先把代码预编译成中间码然后再执行

解释型语言的特征不在于他们是否被编译,而是编译器是语言运行时的一部分

函数 dofile 的存在就是说明可以将 Lua作为一种解释型语言被调用。

dofile实际上是一个辅助的函数。真正完成功能的函数是 loadfile

loadfile编译代码成中间码并且返回编译后的 chunk 作为一个函数,而不执行代码

loadstring 与 loadfile 相似,只不过它不是从文件里读入 chunk,而是从一个串中读入。

函数:

Lua 中的函数是带有词法定界(lexical scoping)的第一类值(first-class values)。

第一类值指:在 Lua 中函数和其他值一样可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值。

词法定界指:嵌套的函数可以访问他外部函数中的变量。

function func_name (arguments-list)
    statements-list;
end;

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。

当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()可有可无。

Lua 函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用 nil 补足。

Lua 函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua 将函数参数放在一个叫 arg 的表中,除了参数以外,arg 表中还有一个域 n 表示参数的个数。

命名参数:

Lua 的函数参数是和位置相关的,调用时实参会按顺序依次传给形参。

Lua 可以通过将所有的参数放在一个表中,把表作为函数的唯一参数来实现上面这段伪代码的功能。

Lua 中关于函数稍微难以理解的是函数也可以没有名字。

我们所说的函数 就是指向函数的变量

迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。

Lua 会首先把代码预编译成中间码然后再执行

table 是 Lua 中唯一的数据结构,其他语言所提供的数据结构

如:arrays、records、 lists、queues、sets 等,Lua 都是通过 table 来实现。

lua 中通过整数下标访问 table 中元素,即是数组。并且数组大小不固定,可动态增长。

习惯上,Lua 的下标从 1 开始。(主要是为了使用标准库中的函数)

array = {}
for i = 1 , 1000 do array[i] = i end
print(array[128])  --128

可以用构造器在创建数组的同时初始化数组:

array = {9,8,7,6,5,4,3,2,1,0}

Lua 中有两种表示矩阵的方法,一是“数组的数组”。table 的每个元素是另一个 table。

matrix = {}

for i = 1,9 do
    matrix[i] = {}
    for j = 1,9 do
        matrix[i][j] = i*j 
    end 
end





result = coroutine.create(function() print "Hello Dariion" end)

print(result)
print(coroutine.status(result))
print(coroutine.resume(result))

I/O 库为文件操作提供两种模式。

简单模式拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。

完全模式使用外部的文件句柄来实现。

它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。

简单模式的所有操作都是在两个当前文件之上。

I/O 库将当前输入文件作为标准输 入(stdin),将当前输出文件作为标准输出(stdout)。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
NGINX openrestry
nginx中的变量:在Nginx配置中,变量只能存放一种类型的值,因为也只存在一种类型的值,那就是字符串。Nginx变量创建或者定义发生在nginx启动阶段,赋值操作只会发生在请求实际处理的时候在lua脚本里面引用nginx变量是需要使用ngx.var.name的方式lua当中的ngx.say和n
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
SpringBoot使用@Value给静态变量注入值,不能正确读取相应的值
今天在调试代码的时候发现SpringBoot中使用@Value()给变量赋值,给普通变量赋值是可以的,但是给静态变量即static变量赋值的时候,读取不到相应的值,如果是字符串会读取为null,数字值会读取为0.网上查了一下才发现不能直接给static变量赋值。1、SpringBoot中使用@Value()给普通变量注入值:在applica
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
SpringBoot使用@Value给静态变量注入值,不能正确读取相应的值
今天在调试代码的时候发现SpringBoot中使用@Value()给变量赋值,给普通变量赋值是可以的,但是给静态变量即static变量赋值的时候,读取不到相应的值,如果是字符串会读取为null,数字值会读取为0.网上查了一下才发现不能直接给static变量赋值。1、SpringBoot中使用@Value()给普通变量注入值:在applica
Stella981 Stella981
3年前
Lua学习笔记
\TOC\Lua学习笔记(整理的runoob加自己的见解)注意事项Lua中变量没有预定义类型,每个变量可以包含任意类型的值,要用就直接赋值一种数据类型的值nil类型就nil一个值,表示变量是否被赋值,变量赋值成nil也表示删除变量使用Type(