目录
节流计划旨在降低物联网产品的硬件成本,本专栏将在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、数组实现宏定义功能,提高程序代码的扩展性。