lua ~~~~Ⅱ

lua ~~~~Ⅱ

参考文档:

https://www.runoob.com/lua/lua-data-types.html

https://www.w3cschool.cn/lua/

https://zhuanlan.zhihu.com/p/141875196


本篇学习下面的内容:

  • 变量
  • 循环
  • 流程控制
  • 函数
  • 运算符

变量

Lua 变量有三种类型:全局变量、局部变量、表中的域。

a = 5               -- 全局变量
local b = 5         -- 局部变量

function joke()
    c = 5           -- 全局变量
    local d = 6     -- 局部变量
end

joke()
print(c,d)          --> 5 nil

do 
    local a = 6     -- 局部变量
    b = 6           -- 全局变量
    print(a,b);     --> 6 6
end

print(a,b)      --> 5 6

赋值

a = "hello" .. "world"
t.n = t.n + 1

-- 对多个变量同时赋值
a, b = 10, 2*x  -- a=10; b=2*x
-- 遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作
x, y = y, x                     -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'

-- 当变量个数和值的个数不一致时,
-- 变量个数 > 值的个数             按变量个数补足nil
-- 变量个数 < 值的个数             多余的值会被忽略 

索引

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

其实这里就可以理解为 java的Map(当然这是举例,其实是有区别的,因为table是我觉得是一种比较混杂的数据结构)

t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用

循环

while循环 :

a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end

for循环

-- 数值循环
for i=1,f(x) do
    print(i)
end
 
for i=10,1,-1 do
    print(i)
end

#!/usr/local/bin/lua  
function f(x)  
    print("function")  
    return x*2   
end  
for i=1,f(5) do print(i)  
end 

-- 泛型for循环
-- 打印数组a的所有值  
-- i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。
for i,v in ipairs(a) 
	do print(v) 
end 

#!/usr/local/bin/lua  
days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}  
for i,v in ipairs(days) do  print(v) end   

Lua repeat...until

-- 循环语法格式 相当于 do while
repeat
   statements
while( condition )
    
--[ 变量定义 --]
a = 10
--[ 执行循环 --]
repeat
   print("a的值为:", a)
   a = a + 1
until( a > 15 )    

嵌套循环: 循环的嵌套

循环控制语句

只有 break

--[ 定义变量 --]
a = 10

--[ while 循环 --]
while( a < 20 )
do
   print("a 的值为:", a)
   a=a+1
   if( a > 15)
   then
      --[ 使用 break 语句终止循环 --]
      break
   end
end

流程控制

-- if then end 
--[ 0 为true ]
if(0)
then
    print("0 为真")
end


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

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

elseif( 布尔表达式 3) then
   --[ 在布尔表达式 3 为 true 时执行该语句块 --]
else 
   --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end
        
-- 嵌套        
if( 布尔表达式 1)
then
   --[ 布尔表达式 1 为 true 时执行该语句块 --]
   if(布尔表达式 2)
   then
      --[ 布尔表达式 2 为 true 时执行该语句块 --]
   end
end        

函数

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

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 : 参数

  • result_params_comma_separated:函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。

--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)

   if (num1 > num2) then
      result = num1;
   else
      result = num2;
   end

   return result; 
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))

-- Lua 中我们可以将函数作为参数传递给函数
myprint = function(param)
   print("这是打印函数 -   ##",param,"##")
end

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

-- 多值返回
s, e = string.find("www.w3cschool.cn", "w3cschool") 
print(s, e)


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}))


-- 可变参数
-- Lua将函数的参数放在一个叫arg的表,#arg 表示传入参数的个数。
function average(...)
   result = 0
   local arg={...}
   for i,v in ipairs(arg) do
      result = result + v
   end
   print("总共传入 " .. #arg .. " 个数")
   return result/#arg
end

print("平均值为",average(10,5,3,4,5,6))

运算符

算术运算符

设定 A 的值为10,B 的值为 20

操作符描述实例
+加法A + B 输出结果 30
-减法A - B 输出结果 -10
*乘法A * B 输出结果 200
/除法B / A 输出结果 2
%取余B % A 输出结果 0
^乘幂A^2 输出结果 100
-负号-A 输出结果v -10

关系运算符

A 的值为10,B 的值为 20

操作符描述实例
==等于,检测两个值是否相等,相等返回 true,否则返回 false(A == B) 为 false。
~=不等于,检测两个值是否相等,相等返回 false,否则返回 true<(A ~= B) 为 true。
>大于,如果左边的值大于右边的值,返回 true,否则返回 false(A > B) 为 false。
<小于,如果左边的值大于右边的值,返回 false,否则返回 true(A < B) 为 true。
>=大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false(A >= B) is not true.
<=小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false(A <= B) is true.

逻辑运算符

设定 A 的值为 true,B 的值为 false

操作符描述实例
and逻辑与操作符。 如果两边的操作都为 true 则条件为 true。(A and B) 为 false。
or逻辑或操作符。 如果两边的操作任一一个为 true 则条件为 true。(A or B) 为 true。
not逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。not(A and B) 为 true。

其他运算符

操作符描述实例
连接两个字符串a…b ,其中 a 为 "Hello " , b 为 “World”, 输出结果为 “Hello World”。
#一元运算符,返回字符串或表的长度。#“Hello” 返回 5

运算符优先级

从高到低的顺序

^
not    - (unary)
*      /
+      -
..
<      >      <=     >=     ~=     ==
and
or

-- 除了^和..外所有的二元运算符都是左连接的。
a+i < b/2+1          -->       (a+i) < ((b/2)+1)
5+x^2*8              -->       5+((x^2)*8)
a < y and y <= z     -->       (a < y) and (y <= z)
-x^2                 -->       -(x^2)
x^y^z                -->       x^(y^z)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值