08、Lua 函数

Lua 函数

  • Lua 函数
    • Lua函数主要有两种用途
    • 函数定义
    • 解析:
      • optional_function_scope
      • function_name
      • argument1, argument2, argument3..., argumentn
      • function_body
      • result_params_comma_separated
  • 范例 : 定义一个函数 max()
  • Lua 中函数可以作为参数传递给函数
  • 多返回值
    • Lua函数中,在 return 后列出要返回的值得列表即可返回多值
  • 可变参数
    • 范例 :计算几个数的平均值

Lua 函数

  • 在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。
  • Lua提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua函数主要有两种用途

  • 完成指定的任务,这种情况下函数作为调用语句使用
  • 计算并返回值,这种情况下函数作为赋值语句的表达式使用

函数定义

Lua编程语言函数定义格式如下:

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

解析:

  • optional_function_scope
  • local
  • function_name:
  • argument1, argument2, argument3…, argumentn:
  • function_body:
  • result_params_comma_separated:
  • 实例
  • 以下实例定义了函数 max(),参数为 num1, num2,用于比较两值的大小,并返回最大值:

optional_function_scope

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

function_name

指定函数名称

argument1, argument2, argument3…, argumentn

函数参数,多个参数以逗号隔开,函数也可以不带参数

function_body

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

result_params_comma_separated

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

范例 : 定义一个函数 max()

下面范例定义了一个函数 max(),参数为 num1, num2,用于比较两值的大小,并返回最大值

-- !/usr/bin/lua
-- -*- encoding:utf-8 -*-
-- filename: main.lua
-- Copyright © 2015-2065 www.twle.cn. All rights reserved.--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)if (num1 > num2) thenresult = num1;elseresult = num2;endreturn result; 
end-- 调用函数print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))

运行以上 Lua 脚本,输出结果如下:

$ lua main.lua
两值比较最大值为  10
两值比较最大值为  6

Lua 中函数可以作为参数传递给函数

-- !/usr/bin/lua
-- -*- encoding:utf-8 -*-
-- filename: main.lua
-- Copyright © 2015-2065 www.twle.cn. All rights reserved.myprint = function(param)print("这是打印函数 -   ##",param,"##")
endfunction add(num1,num2,functionPrint)result = num1 + num2-- 调用传递的函数参数functionPrint(result)
end
myprint(13)-- myprint 函数作为参数传递
add(3,7,myprint)

运行以上 Lua 脚本,输出结果如下

$ lua main.lua
这是打印函数 -   ## 13  ##
这是打印函数 -   ## 10  ##

多返回值

Lua 中的函数可以返回多个结果值,例如 string.find 返回匹配串 “开始和结束的下标”(如果不存在匹配串返回 nil )

s, e = string.find("www.twle.cn", "twle") 
print(s, e) 
5 10   --输出结果

Lua函数中,在 return 后列出要返回的值得列表即可返回多值

-- !/usr/bin/lua-- -- encoding:utf-8 -- -- filename: main.lua -- Copyright © 2015-2065 www.twle.cn. All rights reserved.function multiple_values()local a = 1local b = 2local c = 3return a, b, c
endlocal x, y, z = multiple_values()
print(x, y, z)  -- 输出:1 2 3

运行以上 Lua 脚本,输出结果如下

$ lua main.lua
1 2 3

可变参数

Lua 中的函数可以接受可变数目的参数。
和 C 语言 类似,Lua 在函数参数列表中使用三点 (…) 表示函数有可变的参数
Lua 将函数的参数放在一个叫 arg 的 table 中, #arg 表示传入参数的个数

范例 :计算几个数的平均值

-- !/usr/bin/lua
-- -*- encoding:utf-8 -*-
-- filename: main.lua
-- Copyright © 2015-2065 www.twle.cn. All rights reserved.function average(...)result = 0local arg={...}for i,v in ipairs(arg) doresult = result + vendprint("总共传入 " .. #arg .. " 个数")return result/#arg
endprint("平均值为",average(1,3,5,7,9,11))

运行以上 Lua 脚本,输出结果如下

$ lua main.lua 总共传入 6 个数 平均值为 6.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Laravel 数据库:判断数据表是否存在

检测某个表是否存在: if (Schema::hasTable(table_name)) { // } 在某个表不存在的情况下再执行创建操作: if ( ! Schema::hasTable(table_name)) { // 创建数据库表的代码 } 如果你想安全的 drop 掉一个数据表,使用以下&#xf…

蓝桥杯刷题记录之蓝桥王国

只是记录 这题用迪杰斯特拉来就行&#xff0c;我写的是堆优化版本 import java.util.*;public class Main{static Scanner s new Scanner(System.in);static int n,m,startPoint1;static List<Edge>[] table;//邻接表,因为是稀疏图static long[] dist;static boolean[] …

Day25 代码随想录(1刷) 回溯

39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复…

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代&#xff0c;它不仅颠覆了传统展览的局限&#xff0c;还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理&#xff0c;这一在线展…

瑞吉外卖实战学习--6、通过try和catch进行异常处理

try和catch进行异常处理 效果图前言1、公共拦截器进行异常处理1.1、创建公共报错处理的方法1.2、@ControllerAdvice中设置要拦截的类1.3、@ExceptionHandler中写处理的异常类2、完善错误拦截器2.1、效果效果图 前言 当用户名重复数据库会报错,此时就需要捕获异常操作 1、公共…

Spring: 在SpringBoot项目中解决前端跨域问题

这里写目录标题 一、什么是跨域问题二、浏览器的同源策略三、SpringBoot项目中解决跨域问题的5种方式&#xff1a;使用CORS1、自定 web filter 实现跨域(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、 CorsFilter(全局跨域)4、使用CrossOrigin注解 (局部跨域) 一、什么是跨域…

社交网络的未来:Facebook如何塑造数字社交的下一章

引言 社交网络已成为我们生活中不可或缺的一部分&#xff0c;而Facebook作为其领军者&#xff0c;一直在塑造着数字社交的未来。本文将深入探讨Facebook在未来如何塑造数字社交的下一章&#xff0c;并对社交网络的发展趋势进行展望和分析。 1. 引领虚拟社交的潮流 Facebook将…

Lombok之@SneakyThrows

1前言&#xff1a; 这里记录一个SneakyThrows的用法&#xff0c;关于他的用法&#xff0c;在官网上可以知道的很清楚 官网介绍&#xff1a;http://projectlombok.org/features/SneakyThrows.html 2代码示例 个人理解&#xff1a;在代码中&#xff0c;使用 try&#xff0c;cat…

C++vector和C语言数组的区别

vector 是 C 标准模板库&#xff08;STL&#xff09;中的一个类模板&#xff0c;它提供了一个动态数组的功能&#xff0c;能够根据需要自动增长或缩小。而 C 语言数组则是 C 语言提供的一种固定大小的序列容器。下面是 vector 和 C 语言数组之间的一些主要区别&#xff1a; 动…

VRP and related algorithms for logistics distribution综述的笔记

选了些自己感兴趣的。 车辆路径问题(VRP)是当今物流公司面临的最关键挑战之一。自1959年丹齐格和兰姆泽(1959年)介绍了卡车调度问题以来,研究人员一直在研究车辆路由和交付调度。它被认为是车辆路径问题(VRP)的范例,并且涉及从中央仓库到地理分散的客户的货物配送。 自…

Polars学习-常用函数代码

下载包 导入包 数据读写 import polars as pl from datetime import datetimedf pl.DataFrame({"integer": [1, 2, 3],"date": [datetime(2022, 1, 1),datetime(2022, 1, 2),datetime(2022, 1, 3),],"float": [4.0, 5.0, 6.0],} ) print(df) …

小白从0学习ctf(web安全)

文章目录 前言一、baby lfi&#xff08;bugku-CTF&#xff09;1、简介2、解题思路1、解题前置知识点2、漏洞利用 二、baby lfi 2&#xff08;bugku-CTF&#xff09;1.解题思路1、漏洞利用 三、lfi&#xff08;bugku CTF&#xff09;1、解题思路1、漏洞利用 总结 前言 此文章是…

uniapp保留两位小数,整数后面加.00

直接把方法粘贴进去就能用 <text class"bold">总收入&#xffe5;{{formater(priceNumer)}}</text>export default {data() {priceNumer: 199.999, // 总收入},methods: {// 保留两位小数formater(data) {if(!data) return 0.00data parseFloat(data).…

SpringBoot -- 整合SpringMVC

SpringBoot已经替我们整合了许多框架并进行了默认的配置&#xff0c;我们只需要在依赖中导入spring-boot-starter-web&#xff0c;就可以直接使用SpringMVC以及web场景下的已经整合好的功能。但SpringBoot的默认配置可能无法满足我们所有的需求&#xff0c;那么我们怎么进行自定…

Java复习第十二天学习笔记(JDBC),附有道云笔记链接

【有道云笔记】十二 3.28 JDBC https://note.youdao.com/s/HsgmqRMw 一、JDBC简介 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet&#xff0c;每个数据库厂商实现了这套接口&#xff0c;例如MySql公司实现了&#xff1a;MySql驱动…

Unity SqlServer

今天说点废话 这段代码是在Unity中实现的一个简单的数据库连接示例&#xff0c;主要用于演示如何在Unity中使用C#连接到SQL Server数据库并执行基本的SQL查询操作。 导入所需命名空间&#xff1a; 1using UnityEngine; 2using System.Data.SqlClient; UnityEngine是Unity引擎提…

初识 51

keil的使用: 具体细节请移步我上一篇博客:创建第一个51文件-CSDN博客 hex -- 汇编语言实现的文件 -- 直接与单片机对接的文件 单片机 -- 一个集成电脑芯片 单片机开发版 -- 基于单片机的集成电路 stc 89 c52RC / RD 系列单片机 命名规则: 89 -- 版本号&#xff1f; C --…

Dockerfile常用指令以及使用案例

Dockerfile常用指令以及使用案例 1、ADD复制文件 ADD 指令用于复制文件&#xff0c;格式为&#xff1a;* ADD <src>...<dest>* ADD ["<src>",..."<dest>"]从 src 目录复制文件到容器的 dest。其中 src 可以是Dockerfile 所在目录…

C++初阶:string类模拟实现

本节内容主要针对的是在STL之前的string类的实现&#xff0c;通过模拟实现string类的一些功能来更好地使用string。本篇主要针对的是非const对象&#xff0c;如果要实现const的对象的话&#xff0c;只需要在对应的部分增添上const就行了。编者水平有限&#xff0c;如有错误欢迎…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210&#xff0c;将在线训练的模型部署在K210&#xff08;代码后面给出&#xff09;上&#xff0c;能够识别卡皮巴拉水杯&#xff08;没错&#xff0c;卡皮巴拉&#xff0c;情绪稳定&#xff0c;真的可爱&#xff01;&#xff09;。数据集是用K210拍…