Lua探路(2):函数

Codex平台Sol指令调用Luna Max模型:环境搭建与效果验证全指南 在AI模型应用开发中,API调用与提示工程是核心技术环节。通过优化模型调用方式和指令设计,可以显著提升输出效率与质量。其技术价值在于实现单位资源内更高效的信息生成,降低开发迭代成本。典型应用场景包括代码生成、内容创作和任务自动化等。本文聚焦于Codex平台中通过Sol指令调用Luna Max模型的实践方案,涉及环境配置、连通性验证和效果评估等关键步骤,帮助开发者避开常见配置陷阱,实现稳定可靠的模型集成。 阅读详情
函数基础
(1)函数

格式:

function fun_name(params)
--body
end

调用方式:

o.fun(x) 或  o:fun(x)

其中冒号调用方式会隐含将o作为函数第一个参数传入;

参数:形参和实参数量可以不同,规则和多重赋值一致;

多重返回值:只需在return时这样写

return a, b, c

print可以接受不同数量的实参,多重返回值的函数可以直接作为其它函数的参数,也可以作为table的构造式 –> a = {f()};

(2)table.unpack

返回数组中所有值

print(table.unpack({10, 20, 30}))
local a = {10, 20, 30}
print(table.unpack(a))
local a = {}
a[1] = 10;
a[2] = 20;
a[3] = 30;
print(table.unpack(a))
(3)变长参数

lua的函数可以接受不同数量的实参

function add(...)
 -- body
 local s = 0
 for i,v in ipairs{...} do  --注意这里是大括号
  s = s + v
 end
 return s
end

print(add(3,4, 10, 25, 12))    --54

参数表中三个点(…)表示该函数可接受不同数量的实参。
表达式(…)的行为类似一个具有多重返回值的函数。
把第一个和第二个参数赋给a和b :local a, b = …
可以像访问数组一样去访问可变参数。
select(p1, p2):p1为数字n,那么select返回它第n个可变实参;p1为‘#’select返回变长参数的总数。

function fun( ... )
 -- body
 local len = select('#', ...) -- 获取长度
 local params = {...}
 for i=1,len do
  print(params[i])
 end
end

fun(3, 4, 10, 25, 12)
(4)具名实参

传递table


函数进阶
(1)匿名函数

在lua中,函数是一种第一类值,就是和其它传统类型一样可以存储到变量或table中,可以作为实参传递给其它函数,还可以作为其它函数的返回值。
函数与所有其它值一样都是“匿名”的:函数定义有一下两种方法,表明fun只是一个持有函数的变量,而不是函数的名称。

unction fun( ... )
 -- body
end

fun = function( ... )
 -- body
 print('fun')
end

使用匿名函数:

local tb = {
 {name = "grauna", level = "50"},
 {name = "lua", level = "10"},
 {name = "arraial", level = "30"}
}

table.sort( tb,
 function(a, b)  --匿名函数
  return (a.name < b.name)
 end)

print(tb[1].name)
print(tb[2].name)
print(tb[3].name)

table.sort用于对table中元素排序

(2)闭合函数

在函数内部定义的函数,能够通过建立一个闭合函数(closure),在外部函数已经执行完毕的情况下,还能访问到在外部函数中的局部变量。

后来发现一个规律:所有定义在函数内部的函数,都不能直接在外部函数外部访问,只能通过外部函数把内部函数返回出来,这样在外部函数的外部才可以使用,这也就是闭包函数通俗的理解吧。例如下面代码中的 c1、c2

function fun()
 -- body
 local i = 1
 print(i);
 return function()   --返回了闭包函数
  -- body
  i = i+1
  return i
 end
end

c1 = fun() --创建闭合函数 c1
c2 = fun() --创建闭合函数 c2                  注意:这里进行的操作其实是执行了fun函数,但并没有执行匿名函数,而是把匿名函数赋值给c1、c2了,所以c1()、c2()其实执行里面匿名函数

print(c1()) --也可以print(fun()())这样调用,print(fun())打印是fun函数里面的匿名函数的地址
print(c1())
print(c1())

--输出 1 2 3 4

在fun函数中匿名函数,仍能访问到fun作用域下的局部变量,i 对于匿名函数来讲被称作“非局部变量”。其中c1和c2是同一个函数创建的两个不同的closure,它们各自拥有局部变量的独立实例。

(3)非全局函数

函数可以存储在全局变量、局部变量、table字段中。只要将函数存到一个局部变量中,该函数只能在某个特定的作用域使用。
定义:

local a = function()
 -- body
end
local function a()
 -- body
end
(4)尾调用消除

尾调用:当 f 调用完 g 之后就再无其他事情可做了,这种情况下,当 g 返回时,执行控制权直接返回到调用 f 的那个点上。
消除:在尾调用之后,程序不需要保存任何关于该函数的栈信息了,使得在进行尾调用时不耗费任何栈空间。

function f()
 -- body
 print("f")

 g()  -- g()是函数f的最后调用
end
Nmap漏洞检测实战:从端口扫描到自动化漏洞验证 端口扫描是网络安全评估的基础环节,其核心原理是通过发送特定网络数据包探测目标主机开放的端口及服务信息。在渗透测试和红队评估中,端口扫描不仅是信息收集的起点,更是后续漏洞验证的关键前置步骤。Nmap作为业界标准的网络探测工具,通过其强大的脚本引擎(NSE)实现了从被动信息收集到主动漏洞检测的技术跨越。NSE脚本库提供了数百个脚本,涵盖漏洞检测、服务枚举、安全配置审计等多个类别,能够针对Apache、SMB、SSH等常见服务进行精准的漏洞验证,例如检测CVE-2021-41773、MS17-010等已知漏洞。这 阅读详情

相关推荐

开篇词:6000万会员规模下,我们是怎么做秒杀系统的

第一次自由卡促销活动,把核心交易系统打挂了。自由卡是一种虚拟预付卡,用户先充值,再用卡内余额购买商品。配合半价或大力度折扣时,对用户的吸引力非常强。活动一开始,瞬时并发请求直接把核心系统的数据库连接池打满,整个交易链路不可用。不光秒杀用户受影响,正常的下单、支付也全部阻塞。那次事故之后,CTO拍板:做一套独立的秒杀系统,和核心交易链路完全隔离。秒杀流量不管多大,不能影响正常交易。后端组建了两个技术小组:会员用户组和订单支付组,加起来十几位同学参与。前端有独立团队配合。

Sam_Deep_Thinking 897

Lua探路(1):语言基础

类型与值 基础类型 1. nil(空) 表示无效, 2. boolean(布尔) true or false;lua将false和nil视为假,0和空字符串视为真, 3. number(数字) 实数,lua没有整数和浮点数之分,可以使用科学计算法、 4. string(字符串) lua字符串是不可变值,不能直接修改字符串中的某个字符,而应该创建一个新的字符串,...

7-SEVENS 242

18、太空探索中的机器人:从月球到火星

本文探讨了机器人在太空探索中的关键作用,从早期的月球探测器如“游骑兵号”、“勘测者号”和“月球轨道器号”,到太阳系边缘的“旅行者号”探测器,再到火星探索的“探路者号”、“勇气号”、“机遇号”和“好奇号”漫游车。文章分析了机器人如何克服太空极端环境,执行复杂任务,并通过技术进步和公众参与推动太空科学研究。同时,还讨论了机器人太空探索面临的挑战、伦理问题以及未来发展方向,强调了机器人在人类探索宇宙过程中的不可替代性。

v6b7n8m9q0的博客 176

Lua探路(3):编译、执行、错误

编译 区分解释型语言的主要特征不是能否去编译它们,而是在编译器是否是运行时库的一部分,是否有能力执行动态生成的代码。 dofile:实际是调用loadfile,从文件加载lua代码,编译并运行,会引发错误 loadfile:从文件加载lua代码,编译但不运行(编译成函数,作为匿名函数返回),不会引发错误,有错误时只是返回错误值 源代码 foo.lua function foo(x) ...

7-SEVENS 270

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)

随着 QUIC 协议在互联网领域的广泛应用,其基于 UDP 的传输特性与加密设计,打破了传统 TCP 协议下的域名封堵逻辑,给网络合规管理与安全防护带来新的技术难题。本文将脱离具体代码实现,聚焦 QUIC 协议域名封堵的核心原理、关键技术环节与实际落地路径,从协议特性本质出发,解析如何在遵循 RFC 9000、RFC 9001 等规范的前提下,实现对 QUIC 流量的精准域名封堵。

chen1415886044的博客 1465

Redis探路

1. 定义: Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorte

Xi's LiuY 377

RTKLIB PPP与RTK_POST精密定位实战:从实时到事后处理的完整流程解析

本文详细解析了如何使用RTKLIB进行精密单点定位(PPP)的完整流程,涵盖从实时处理到事后处理(RTK_POST)的关键步骤。文章深入探讨了数据准备、软件配置、核心参数设置(如电离层、对流层、潮汐改正)以及常见问题排查,旨在帮助用户掌握高精度GNSS定位技术,实现从入门到精通的实战应用。

weixin_29047919的博客 276

【Unity开源项目精选】xLua:Unity热更新首选

洪流学堂,让你快人几步。你好,我是你的技术探路者郑洪智,你可以叫我大智。 今天给你分享一个Unity开源项目,我们一起来看看吧! xLua C#下Lua编程支持: xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。 xLua的突破 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现。 出色的GC优化,自定义struct,枚举在Lu.

大智_Unity探路者 681

【Docker】从零构建达梦DM8轻量级服务镜像:实战与优化

本文详细介绍了从零开始构建达梦DM8轻量级Docker镜像的完整实战流程。通过分析传统安装方式的痛点,阐述了使用Docker封装数据库的优势,并重点讲解了如何利用静默安装、精简组件、多阶段构建等优化技巧,打造一个体积小巧、启动迅速、配置灵活的DM8服务镜像,助力实现开发、测试与部署的环境一致性与高效性。

ooo22的博客 518

lighttools用透镜旋转手动创建菲尼尔透镜

学过很多软件,都没有留下痕迹,很多年之后只记得学过的软件常用的一些功能,稍微难一些的再次用起需要重新学,但如果留下点痕迹,重新再用就会很快。lighttools无意之中接触了,记一点点笔记吧。...

kingsai2012的博客 4329

为lua脚本添加新的绑定编译报错(ubuntu16.04、ArduCopter-4.0.0、已解决)

最近ardupilot项目发布了arducopter-4.0版本,新增了对lua脚本的支持,官方添加了一些lua脚本可用的函数和类,官方的教程中也给出了添加新的绑定的方法。 根据官方的教程,我在没有添加新绑定的情况下,运行make run,目的是熟悉下添加新绑定的流程,为以后的开发探探路(没想到还真遇到了问题,,,)。 在指定路径下执行 make run,报...

BreederBai的博客 726

QT的温湿度显示系统

大家好,这里是石侃侃的博客,欢迎前来讨论这篇文章介绍的是DHT11在2440上的基于Qt5.6的应用基于单片机系统的温湿度监测系统构成框图如图2-1所示。图2-1 系统构成框图该系统采用单片机s3c2440作为了本设计的核心元件。利用LCD作为了显示器件,利用触摸屏作为用户界面输入设备,第一行显示当前实时的温度,湿度,第二行依次显示历史时刻最高的温度值,最高的湿度值。第三行是一个文本框,记录了程...

zxpcus的博客 1万+

A星寻路算法的Lua实现

A星寻路

zkdemon的专栏 1320

S7-1500——(一)西门子PLC编程算法及程序设计1、拆解基本算法(一)

顺序队列也是一种操作受限的线性表,在一端添加数据,另一端取出数据,符合先进先出的特性工作过程:需要两个指针来指向存取元素的位置(头指针,尾指针)如下图头指针指向队列里边第一个元素位置(即下次出队元素所在的位置)尾指针是指向队列内最后一个元素的下一个位置(即下次要入队的元素要存放的位置)空队状态:最初始状态,队列没有任何元素,头指针和尾指针都指向队头,(由于没有任何元素,不能做出队操作,可进行入队操作)入队操作出队操作满队:一直入队,最终元素装满队列;满队后,虽然队列前面还有空间,但由于。

大小曲奇的博客 1605

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8664

BUG修复项目测评! DeepSeek V4 Flash、GLM-5.2、GPT-5.6 Luna哪个强?

B站"屎山论剑"挑战赛实测三大AI模型(DeepSeek V4 Flash、GLM-5.2、GPT-5.6 Luna)修复复杂代码Bug的能力。比赛设置青铜(版本号比较)、白银(数据耦合)、黄金(缓存切面)、钻石(缓存业务叠加)四关。最终比分4:3:3,V4 Flash险胜:GLM-5.2速度最快(钻石关2分23秒),但V4 Flash关键时刻更准(黄金关直接得2分);Luna复杂任务耗时过长(钻石关改2小时未果)。策略差异明显:GLM善用子代理探路,V4亲力亲为反复验证,Luna靠多线程"体力"攻坚

2601_96073073的博客 609

YOLOv11改进策略【损失函数篇】| 将激活函数替换为带有注意力机制的激活函数 ARelu

将ELSA中的函数Φ\PhiΦ用具有可学习参数α\alphaα和β\betaβ的网络层表示为LxiαβCαxixi0σβxixi≥0Lxi​αβCαxi​σβxi​​xi​0xi​≥0​,结合标准的Rectified Linear UnitsRxi0xi0xixi≥0Rxi​0xi​​xi​0xi​≥0​,得到可学习激活函数Fxiα。

Limiiiing的博客 2115

大脚插件lua错误_魔兽世界:解锁德拉诺飞行成就指南,并有宝箱插件分享

今天我们来研究一下,如何解锁6.0德拉诺飞行成就,为了艾泽拉斯的萌新。小编在很在之前有分享 2 篇关于德拉诺版本的的大概内容,一篇是基础内容,一篇详细介绍坐骑的,有兴趣的朋友可先简单看一下,结合这篇文章,应该会让你更全面的了解德拉诺。点击下方链接:魔兽世界-旧版本6.0的《德拉诺》值不值的去玩?魔兽世界-德拉诺坐骑的收集之路(休闲玩家)完成【德拉诺探路者】成就,不仅能在德拉诺飞行,而且还额外赠送一...

weixin_42333370的博客 2779

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Redis中容易啋的坑

你好,我是梁松华,今天的话题是Redis中容易啋的坑。Redis内存数据库是一把双刃剑,用得好的话就合家欢喜,否则就是深陷泥潭。所以我今天来谈一谈使用它时容易碰到的坑,帮你探探路。我们在...

松花皮蛋的黑板报 251

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

当太阳能板指向错误:一次软件失效的系统级验证反思

2025年2月26日,NASA发射月球轨道探测器“月球探路者”Lunar Trailblazer。这颗小卫星由美国宇航局JPL管理、加州理工学院领导,任务目标为获取月球水资源分布数据,绘制月球水资源分布图。

digi2020的博客 633

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

91% Token 耗在读代码上:AI 编程 Agent 的成本真相和优化实战 实测 Prewalk 方案最高砍掉 53% Token 成本,附开源框架适配思路

AI 编程 Agent 的 Token 开销,91% 花在了读代码、检索文件、查看日志等只读操作上,真正用于代码编辑的不到 10%。成本瓶颈不在模型生成能力,而在于反复冗余的代码读取解析。Prewalk 上下文交接方案通过优化上下文流转和模型协作逻辑,实测最高砍掉 53% Token 成本,执行速度提升 47%。

scarry2026的博客 578

完结篇:28篇,一套完整的秒杀系统交付给你了

提醒」:是付费专栏,但是在知识星球里是免费的。写到这里,这个专栏正式完结了。整个项目一共写了从开篇词到全链路压测,28篇文章,前后持续了几周。写的过程比我预想的累很多。不是技术本身难,而是要把一套真实的生产系统拆开来,用文字讲清楚每一个设计决策背后的原因,同时还要保证前后28篇的技术细节完全一致、互相对得上,这个工作量远超写代码本身。有些章节反复改了三四遍。不是因为技术方案有问题,而是写出来之后发现读者如果没看过前面的某一篇,这段话就会看不懂。

Sam_Deep_Thinking 496

Cocos2dx v3.9项目位置和基本操作

Cocos2dx v3.9项目位置和基本操作 MainScene.lua 在Mydemo\src\app\views下 官方示例 cocos2d-win32.sln在cocos2d-x-3.9\build下 生成项目 -l指定语言,-d指定路径 cocos.py new Snake -l lua -d D:\cocos2dLua ...

Jinyao的博客 244

ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

文章目录1.前言2. SDK使用流程3. Non-OS SDK4. 软件环境搭建 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。 共同学习成长QQ群 622368884,不喜勿加,里面有一大群志同道合的探路人 快速导航 单片机菜鸟的博客快速索引(快速找到你要的) 如果觉得有用,麻烦点...

单片机菜鸟哥的博客 1万+

AI江湖录①·斩杀线

本文以武侠章回体讲述 2026 年 7 月末至 8 月末三十二天内,智谱与 DeepSeek 围绕大模型 API 定价展开的攻防战。

171
上一篇: Lua探路(1):语言基础
下一篇: Lua探路(3):编译、执行、错误
7-sevens
博客等级 码龄10年 259粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值