openresty开发系列14--lua基础语法3函数

一)function (函数)

有名函数:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end

optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。

function 函数定义关键字

function_name: 指定函数名称。

argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。

function_body: 函数体,函数中需要执行的代码语句块。

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

end:函数定义结束关键字

1)函数实例

--[[ 函数返回两个值的最大值 --]]
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))

匿名函数

optional_function_scope function_name = function (argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end

有名函数的定义本质上是匿名函数对变量的赋值。为说明这一点,考虑

function foo()
end
等价于
foo = function ()
end

类似地,
local function foo()
end
等价于
local foo = function ()
end

local function 与 function 区别

1 使用function声明的函数为全局函数,在被引用时可以不会因为声明的顺序而找不到
2 使用local function声明的函数为局部函数,在引用的时候必须要在声明的函数后面

function test()
    test2()
    test1()
end

local function test1()
    print("hello test1")
end

function test2()
    print("hello test2")
end

test()

-----------------
local function test1()
    print("hello test1")
end

function test()
    test2()
    test1()
end

function test2()
    print("hello test2")
end

test()

==========================

函数参数

1) 将函数作为参数传递给函数

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

local function add(num1,num2,functionPrint)
   result = num1 + num2

functionPrint(result)
end

add(2,5,myprint)

2)传参数,lua参数可变

local function foo(a,b,c,d)
    print(a,b,c,d)
end

a、若参数个数大于形参个数,从左向右,多余的实参被忽略

b、若实参个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil

c、Lua还支持变长参数。用...表示。此时访问参数也要用...,如:
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(1,2,3,4,5,6))

3)返回值

Lua函数允许返回多个值,返回多个值时,中间用逗号隔开

函数返回值的规则:

  1)若返回值个数大于接收变量的个数,多余的返回值会被忽略掉;

  2)若返回值个数小于参数个数,从左向右,没有被返回值初始化的变量会被初始化为nil

local function init()
        return 1,"lua";
    end

local x,y,z = init();

print(x,y,z);

注意:

  1)当一个函数返回一个以上的返回值,且函数调用不是一个列表表达式的最后一个元素,那么函数只返回第一个返回值

local function init()
        return 1,"lua";
    end

local x,y,z = 2,init();  --local x,y,z = init(),2;

print(x,y,z);

2)如果你确保只取函数返回值的第一个值,可以使用括号运算符
    local function init()
        return 1,"lua";
    end

local x,y,z = 2,(init());

print(x,y,z);

转载于:https://www.cnblogs.com/reblue520/p/11429715.html

openresty开发系列14--lua基础语法3函数相关推荐

  1. openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息

    openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息 ...

  2. openresty开发系列39--nginx+lua实现接口签名安全认证

    一)需求背景 现在app客户端请求后台服务是非常常用的请求方式,在我们写开放api接口时如何保证数据的安全, 我们先看看有哪些安全性的问题 请求来源(身份)是否合法? 请求参数被篡改? 请求的唯一性( ...

  3. openresty开发系列15--lua基础语法4表table和运算符

    openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表) Table 类型实现了一种抽象的"关联数组".即可用作数组, ...

  4. openresty开发系列13--lua基础语法2常用数据类型介绍

    openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔) 布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...

  5. openresty开发系列24--openresty中lua的引入及使用

    openresty开发系列24--openresty中lua的引入及使用 openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua   ---> ...

  6. openresty开发系列38--通过Lua+Redis 实现动态封禁IP

    openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝 ...

  7. openresty开发系列16--lua中的控制结构if-else/repeat/for/while

    openresty开发系列16--lua中的控制结构if-else/repeat/for/while一)条件 - 控制结构 if-else if-else 是我们熟知的一种控制结构.Lua 跟其他语言 ...

  8. openresty开发系列29--openresty中发起http请求

    openresty开发系列29--openresty中发起http请求 有些场景是需要nginx在进行请求转发 用户浏览器请求url访问到nginx服务器,但此请求业务需要再次请求其他业务: 如用户请 ...

  9. openresty开发系列36--openresty执行流程之6日志模块处理阶段

    openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...

最新文章

  1. 破译“生命天书”20年
  2. 广东春运安保工作提前10天启动
  3. 英利1500伏光伏组件系列亮相美国
  4. uml类图例子_转:(中文命名)UML类图新手入门级介绍
  5. idea+maven+ssm搭建boot_crm项目遇到的问题
  6. RAC中如何更改对外网卡和内部互联网卡的配置、IP及VIP
  7. 阿里披露 AI 完整布局,飞天 AI 平台首次亮相!
  8. 每天Leetcode 刷题 初级算法篇-颠倒二进制位
  9. C#调用DLL函数方法
  10. DEA for mac 热部署
  11. 三星android se,安卓小钢炮小米8 SE初体验!华为三星靠边站
  12. 基于TensorFlow的车牌号识别系统
  13. python fundamental structure_Data Structures and Algorithms in Python
  14. APP版本更新通知流程图
  15. 单片机移频防啸叫_JDS M-9108全自动高速移频反馈抑制器 会议鹅颈话筒麦克风防啸叫...
  16. LiveGBS如何配置安防摄像头云端录像存储回放
  17. 系统架构设计师备考经验分享:边听课边画思维导图,高效学习
  18. 厦大教授计算机专业,厦门大学计算机系李翠华教授的荣休座谈会
  19. 设置电脑双显示屏或者说扩展一个显示器
  20. 在来一次 快转存哦

热门文章

  1. excel vba 调用webbrowser_Python杀死Excel?我只会用Python来增强Excel!
  2. (Mybatis)XML配置解析
  3. 使用eclipse自带制作帮助系统
  4. mac搭建nginx+rtmp直播流
  5. xml解析: dom4j
  6. python爬取内容乱码_【提问】PYTHON 爬取下来的中文数据显示乱码
  7. es对分组后结果进行统计_ElasticSearch里面如何分组后根据sum值排序
  8. Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31
  9. 在阿里,我们这样帮助用户实现业务云原生化迁云
  10. linux阿波罗配置文件放在哪,Apollo阿波罗配置中心