节流计划-基础知识-3-LUA语法-中

目录

函数

函数的初始化

函数的内部调用

函数的跨文件调用

多返回参数的函数作为参数被调用

数组(表)

数组的初始化

数组的基本应用

数组的作用域

数组元素的调用

使用数组嵌套实现结构体功能

使用数组实现宏定义功能


节流计划旨在降低物联网产品的硬件成本,本专栏将在2021年持续更新。

节流计划不采用STM32/STC/PIC等传统MCU,而是充分挖掘AIR724UG芯片除4G通信外的其他功能,包含但不限于GPIO、TTS、LCD、OTA、FLASH、ADC,KEY,UART,I2C、SPI等。

版权所有,谢绝转载,侵权必究。承接相关物联网项目合作,邮箱:realiot@163.com。


函数

函数的初始化

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语言函数可以返回多个值,每个值以逗号隔开。

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

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

   return result;
end

函数的内部调用

函数被声明之后,可以被调用使用。但是使用时需要注意以下两点:

1、如果函数命名如下面例子所示采用了local关键字限定,则函数只能在当前文件内被调用。

2、如果函数命名如下面例子所示采用了local关键字限定,函数被调用的代码必须排列在函数声明之后,否则系统会报错。

--[[ 函数返回两个值的最小值 --]]
local function min(num1, num2)

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

   return result;
end

-- 内部调用函数
print("两值比较最小值为 ",min(10,4))
print("两值比较最小值为 ",min(5,6))

函数的跨文件调用

函数被声明之后,可以被跨文件调用使用。但是使用时需要注意以下两点:

1、如果函数命名如下面例子所示采用了local关键字限定,则函数不能在其他文件内被调用。

2、函数被调用时,需要采用文件名.函数名(请注意中间的点)的方式调用相应函数,否则系统会报错。

--在alpha.lua中声明函数
--[[ 函数返回两个值的最小值 --]]
function min(num1, num2)

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

   return result;
end

--------------------------------------------------------------------------------------------

--在beta.lua中调用函数

require"alpha.lua"  --添加引用
-- 外部调用函数
print("两值比较最小值为 ",alpha.min(10,4)) --采用  文件名.函数名  的方式调用不在同一个文件的函数
print("两值比较最小值为 ",alpha.min(5,6))  --采用  文件名.函数名  的方式调用不在同一个文件的函数

多返回参数的函数作为参数被调用

在前文的介绍中,我们讲到lua函数可以有多个输入值,也可以有多少输出值。现在我们分情况对函数的返回值进行讨论。

1、需求值数量等于返回值的数量,依序进行返回值的赋值,每个需求值都能得到返回值的赋值

--编写一个函数,将输入值原样返回
local function test(X,Y,Z)
return X,Y,Z
end


--需求值数量等于返回值的数量,都是3个,此时a=1 b=2 c=3
local a,b,c=test(1,2,3)

2、需求值的数量大于返回值的数量,依序进行返回值的赋值,多余的需求值将无法得到赋值,最终值是nil

--编写一个函数,将输入值原样返回
local function test(X,Y,Z)
return X,Y,Z
end


--需求值数量等于返回值的数量,都是3个,此时a=1 b=2 c=3   d=nil
local a,b,c,d=test(1,2,3)

3、需求值的数量小于返回值的数量,依序进行返回值的赋值,多余的返回值不用理会l

--编写一个函数,将输入值原样返回
local function test(X,Y,Z)
return X,Y,Z
end


--需求值数量等于返回值的数量,都是3个,此时a=1 b=2 返回值3被抛弃
local a,b=test(1,2,3)

4、需要特殊说明的一点,函数被调用时,如果函数位于表达式的结尾,则被调用的函数返回其所有返回值;如果函数被调用时不是位于表达式的结尾,则被调用的函数仅返回第一个返回值。

--编写一个函数,将输入值原样返回
local function test(X,Y,Z)
return X,Y,Z
end


--被调用的函数位于表达式的结尾,将返回所有返回值
print(test(1,2,3))
--输出值: 1 2 3



--被调用的函数不是位于表达式的结尾,将返回第一个返回值
print(test(1,2,3)+10)
--输出值: 11

 

数组(表)

数组的初始化

1、数组可以赋初值,也可以不赋初值

2、数组的元素可以是相同类型,也可以不是相同类型

3、数组的元素起始点是元素1(C语言的元素起始点是元素0)

数组的基本应用

1、数组赋值

2、数组调用

数组的作用域

1、local关键字 本文件有效

2、全局变量全局有效

使用数组嵌套实现结构体功能

1、一维数组的调用和赋值

2、嵌套数组的调用和赋值

使用数组实现宏定义功能

1、数组实现宏定义功能,提高程序代码的扩展性。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页