Lua语法学习

这篇具有很好参考价值的文章主要介绍了Lua语法学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lua
-- Events
local StateEvents = ReplicatedStorage:WaitForChild("StateEvents");
local AddMoneyEvent = StateEvents:WaitForChild("AddMoneyEvent");



AddMoneyEvent:FireServer(score*10);

区分大小写

单行注释 --

ctrl+Q 然后在罗布乐思编辑器里面好像是ctrl+?

--[[
print('多行注释')

--]] 
---[[
print('取消多行注释')
--]]
变量

在默认情况下,变量总是认为是全局的。(除非用 local 显式声明为局部变量)全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。

> print(b)
nil
> b=10
> print(b)
10
>

如果你想删除一个全局变量,只需要将变量赋值为nil。这样变量b就好像从没被使用过一样。换句话说, 当且仅当一个变量不等于nil时,这个变量即存在。

Lua 对多个变量同时赋值,不会进行变量传递,仅做值传递:

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

a, b = 0, 1
a, b = a+1, a+1
print(a,b)               --> 1   1
a, b = 0, 1
a, b = b+1, b+1
print(a,b)               --> 2   2
a, b = 0, 1
a = a+1
b = a+1
print(a,b)               --> 1   2
数据类型

Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

number: 表示双精度类型的实浮点数

string:可由一对单引号或双引号表示

fuction:由C或Lua编写的函数

userdata:表示任意存储在变量中的C数据结构

thread:表示执行的独立线路,用于执行协同程序

table:Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

nil

nil 类型表示一种没有任何有效值,它只有一个值 – nil

nil 作比较时应该加上双引号 , 因为type(X) 实质是返回的 “nil” 字符串,是一个 string 类型

> type(X)
nil
> type(X)==nil
false
> type(X)=="nil"
true
>
boolean

boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true:

string

字符串由一对双引号或单引号来表示。

也可以用 2 个方括号 “[[]]” 来表示"一块"字符串。

html = [[
<html>
<head></head>
<body>
    <a href="http://www.runoob.com/">菜鸟教程</a>
</body>
</html>
]]
print(html)


--执行结果是
--[[
<html>
<head></head>
<body>
    <a href="http://www.runoob.com/">菜鸟教程</a>
</body>
</html>
--]]

在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:

\> print("2" + 6) 8.0 \> print("2" + "6") 8.0

反过来,当 Lua 期望一个 string 而碰到数字时,会将数字转成 string。

print(10 .. 20) --> 1020

… 在Lua中是字符串连接符,当在一个数字后面写 … 时,必须加上空格以防止被解释错。

使用 # 来计算字符串的长度,放在字符串前面

使用 # 输出的值其实是字符串所占的字节数。当字符串为英文字符时,由于每个字符只占 1 个字节,所以输出结果等同于字符串长度

len = "www.runoob.com" print(#len) 14 print(#"www.runoob.com") 14

table

不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始。

t[i] --对 table 的索引使用方括号 []。Lua 也提供了 . 操作。

t.i --当索引为字符串类型时的一种简化写法

a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
    print(k .. " : " .. v)
end

lua里面的print自动换行的

tab1={key1="1","2"}
print(tab1[1])--输出2
--前面那个不知道为什么不算进去了,因为不规范吗还是啥
--print(tab1.key1) 此时输出1
循环

while循环

while(condition)
do
   statements
end

for循环

for var=exp1,exp2,exp3 do  
    <执行体>  
end 

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1

for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。

function f(x)  
    print("function")  
    return x*2  
end  
for i=1,f(5) do print(i)  
end

--[[
function
1
2
3
4
5
6
7
8
9
10
-]]

泛型for循环

--打印数组a的所有值  
a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)--print 先输出i 然后输出几个空格然后是v
end 

在lua中pairs与ipairs两个迭代器的用法相近,但有一点是不一样的:

pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key

在table的key是字典的时候,好像就必须要用pairs

repeat…until

a=10
repeat
   print("a的值为:", a)
   a = a + 1
until( a > 15 )

--[[
a的值为:    10
a的值为:    11
a的值为:    12
a的值为:    13
a的值为:    14
a的值为:    15
--]]

和 do while差不多,但是他是在条件为true时退出循环的

lua 中没有 continue 语句有点不习惯。

可以使用类似下面这种方法实现 continue 语句:

for i = 10, 1, -1 do
  repeat
    if i == 5 then
      print("continue code here")
      break
    end
    print(i, "loop code here")
  until true
end
if
if(布尔表达式)
then
   --[ 在布尔表达式为 true 时执行的语句 --]
end
if(布尔表达式)
then
   --[ 布尔表达式为 true 时执行该语句块 --]
else
   --[ 布尔表达式为 false 时执行该语句块 --]
end
if( 布尔表达式 1)
then
   --[ 在布尔表达式 1 为 true 时执行该语句块 --]

elseif( 布尔表达式 2)
then
   --[ 在布尔表达式 2 为 true 时执行该语句块 --]

elseif( 布尔表达式 3)
then
   --[ 在布尔表达式 3 为 true 时执行该语句块 --]
else 
   --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end
函数
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end
  • optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local
  • function_name: 指定函数名称。
  • argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
  • function_body: 函数体,函数中需要执行的代码语句块。
  • result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。

Lua 中我们可以将函数作为参数传递给函数,如下实例:

function myprint(param)
   print("这是打印函数 -   ##",param,"##")
end

function add(num1,num2,functionPrint)
   result = num1 + num2
   -- 调用传递的函数参数
   functionPrint(result)
end
myprint(10)
-- myprint 函数作为参数传递
add(2,5,myprint)

返回多个结果值

function maximum (a)
    local mi = 1             -- 最大值索引
    local m = a[mi]          -- 最大值
    for i,val in ipairs(a) do
       if val > m then
           mi = i
           m = val
       end
    end
    return m, mi
end

print(maximum({8,10,23,12,5}))

可变参数

在函数参数列表中使用三点 表示函数有可变的参数。

function add(...)  
local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
    s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25
sum=0
cnt=0;
function verage(...)
    --sum=0
	--cnt=0
	for i,v in ipairs{...} do
	sum=sum+v
	cnt=cnt+1
	--print(i)
	end
	--print(cnt,sum)
	return sum/cnt;
end

print(cnt)--这为什么是0啊,全局变量?? 然后如果把cnt定义放在函数内部的话输出nil
print(verage(1,2,3,4,5))
function ave(...)
	local sum=0
	for i,v in ipairs{...} do
	sum=sum+v
	end
	a=select(3,...)
	print(a)--输出3
	print(select(3,...))--输出3  4  5  6  7
	return sum
end

print(ave(1,2,3,4,5,6,7))--输出28
  • select(‘#’, …) 返回可变参数的长度。
  • select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。但是如果直接打印的话,只会打印第一个参数

注意一下多返回值的函数在赋值时的情况,仅仅只有放在所有逗号之后的那个函数会把返回值展开

function add()
return 1,0
end

local a,b,c,d=add(),add()
print(a,b,c,d)--输出 1  1  0  nil
运算符

// 整除运算符,计算结果不包含小数部分

/ 除法运算,计算结果包含小数部分

~= 不等于

and 逻辑与

or 逻辑或

not 逻辑非

.. 连接两个字符串

# 一元运算符,返回字符串或表的长度

tab3={}--没有这一行就报错欸
tab3[1]="1"
tab3[2]="2"
tab3[5]="5"
print("tab3的长度",#tab3)--输出2
--如果数组有一个“空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个nil 值都有可能被当成数组的结束)。



tab4={}
tab4[1]="1"
tab4[2]=nil
tab4[3]="2"
tab4[4]=4
print(#tab4)--输出4,按理来说应该是1,应该是因为上面说的是可能,没有很清楚不是很懂。。。。。。。。
Table

在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。除此外我们还可以以负数为数组索引值

for i=-2,2 do
   array[i]=i*10
end

for i=-2,2 do
   print(array[i])
end
local a={1,2,3,4,5}
local b=a[1]
print(a[1] .. ' ' .. b)
a[1]=nil
print(a[1])
print(b)
--输出
1 1
nil
1

b的值还是原来的 不会变成nil

插入insert

table.insert(表名,位置,值)

位置默认是最后一位

移除remove

table.remove(表名,位置)

假设移除表的最后一个元素 table.remove(table,#table)

排序

teble.sort(表名,方法) 默认升序

local a={1,2,language="english",3,4,5,text="hello"}

table.foreach(a,function(i,v)
print(i,v)
end)

table.foreachi(a,function(i,v)
print(i,v)
end)


--输出
1	1
2	2
3	3
4	4
5	5
language	english
text	hello
1	1
2	2
3	3
4	4
5	5

foreach 会把最后索引不是数字的输出

而foreachi 不会输出那些key是非数字的文章来源地址https://www.toymoban.com/news/detail-612532.html

到了这里,关于Lua语法学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Lua04——基本语法

    单行注释 多行注释 标识符用于定义变量,作为变量名在程序中使用。 以字母及下划线开头,可以包含数字。 需要注意的是: 不能定义为下划线+大写字母,避免与Lua中的保留字冲突; 标识符中不能包含@ $ % 等特殊字符; lua中字母区分大小写 在默认情况下,变量都是全局变

    2024年02月09日
    浏览(39)
  • Lua语法结构

    **and ** break **do ** else **elseif ** **end ** false for **function ** if in local nil not or repeat return then true until **while ** nil ** boolean** ** number** ** string** ** function** ** userdata** thread ** table** ```lua –string print(“hello”…“world”); print(“1”…“2”) print(type(“1”…“2”)) – 12 string print(“1”+“

    2024年02月09日
    浏览(34)
  • 【Lua语法】字符串

    Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符,但是可以通过创建一个新字符串的方式来达到修改的目的 可以使用长度操作符(#)来获取字符串的长度 可以使用连接操作符(..)来进行字符串连接 字符串常量 可以使用一对双引号或

    2024年02月07日
    浏览(45)
  • Lua语法之简单变量

    运行结果

    2024年02月07日
    浏览(38)
  • Lua语法(二)——闭包/日期和时间

    参考链接: 系列链接: Lua语法(一) 系列链接: Lua语法(二)——闭包/日期和时间 系列链接: Lua语法(三)——元表与元方法 系列链接: Lua语法(四)——协程 系列链接: Lua语法(五)——垃圾回收 系列链接: Lua语法(六)——面相对象编程 关于闭包,模块和包的概念。 Lua中的闭包、模块和

    2024年04月13日
    浏览(35)
  • Redis Lua脚本执行原理和语法示例

    在学习本文之前,我是强烈建议大家了解一下我的其他两篇博客 《Redis 从入门到精通【进阶篇】一文学会Lua脚本》 《Redis 从入门到精通【进阶篇】之Lua脚本详解》 Redis通过嵌入Lua解释器,实现了对Lua脚本的执行。在执行过程中,Redis保证了脚本的原子性和阻塞性,同时通过脚

    2024年02月12日
    浏览(43)
  • lua脚本的基本语法,以及Redis中简单使用

    Lua 脚本的基本语法如下: 变量与赋值: 变量名可以是字母、数字和下划线的组合,以字母或下划线开头。Lua 是动态类型语言,无需事先声明变量类型。 控制结构: a) 条件语句: b) 循环语句: 函数定义: 函数可以有参数和返回值。 表(table): 表是 Lua 中的一种数据结构

    2024年02月04日
    浏览(52)
  • 【Lua语法】算术、条件、逻辑、位、三目运算符

    加减乘除取余:+ - * / % Lua中独有的:幂运算 ^ 注意: 1.Lua中没有自增自减(++、–),也没有复合运算符(+=、-=) 2.Lua中字符串可以进行算术运算符操作,会自动转成number 如:“10.3” + 1 结果为11.3 大于 小于 大于等于 = 小于等于 = 等于 == 不等于 ~= 返回值依然是bool 注意: 1.与C

    2024年02月11日
    浏览(48)
  • 【Nginx高级篇】Lua基础语法和OpenResty的安装

    目录 一、前言 二、Lua基础语法   hello world 保留 注释 变量 字符串 空值 布尔类型 作用域 控制语句 if-else for循环 函数 赋值 返回值  Table 数组 遍历 成员函数 三、openresty的安装 (一)预编译安装 (二)源码编译安装 (三)服务命令 (四)测试lua脚本以文件的形式

    2024年02月04日
    浏览(36)
  • 【Lua语法】字符串操作、字符串中的方法

    注意:这些方法不会改变原字符串,只会返回一个新字符串

    2024年02月15日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包