lua-switch功能实现

Lua 起航 —— 一些常用基础语法 Lua 起航——常用基础语法 阅读详情
AI摘要

这篇博客介绍了在Lua中由于没有内置的Switch语句,如何通过利用表和匿名函数来模拟Switch功能。文章提供了三种不同的实现方式,分别是直接使用函数表、结合全局函数以及通过创建对象和方法。这些方法在条件判断较多且复杂的情况下,有助于提高代码的可读性和维护性。

lua中是没有Switch语法的,所以很多时候要条件判断的时候只有一条又一条的if 和elseif 去写。当条件比较多且条件里面的内容比较多的时候,会显得比较乱,而且不利于我们后期去维护。但是lua的table类型其实相当强大,我们可以利用表结构和匿名函数,我们就可以实现Switch功能。

下面,归纳了3种常用的写法(其实原理一样):

第一种:

local tab = {
    [1] = function()
              print("aaa")
          end,
    [2] = function()
              print("bbb")
          end,
    [3] = function()
              print("ccc")
          end,
}

function doFunc(cur_index)
    if tab[cur_index] then
        tab[cur_index]()
    end
end

第二种:

local tab = {
    [1] = "aaa",
    [2] = "bbb",
    [3] = "ccc",
}

function doFunc(cur_index)
    if tab[cur_index] then
        _G[tab[cur_index]]()
    end
end

function aaa()
    print("aaa")
end

function bbb()
    print("bbb")
end

function ccc()
    print("ccc")
end

第三种:

local Mgr = {}
switchMgr = Mgr

Mgr.tab   = {
    [1] = "aaa",
    [2] = "bbb",
    [3] = "ccc",
}

Mgr.doFunc = function(cur_index)
    if Mgr.tab[cur_index] then
        Mgr.tab[cur_index]()
    end
end

其他lua类调用的时候,可以

require("./switchMgr ") ;

switchMgr.doFunc(1)

别再用Python卷了!用Matlab的Deep Learning Toolbox快速上手U-Net图像分割(附完整数据集处理代码) 本文介绍了如何使用Matlab的Deep Learning Toolbox快速上手U-Net图像分割,包括数据准备、网络构建、训练监控和模型应用等完整流程。Matlab的高度集成工具链和图形化界面为图像分割任务提供了更快捷、直观的解决方案,特别适合研究人员和工程师快速实现原型验证。 阅读详情

相关推荐

uniapp实战:mui-player插件如何完美适配m3u8/flv直播流(附完整代码)

本文详细介绍了如何在Uniapp中使用mui-player插件完美适配m3u8和flv直播流,提供从基础配置到高级优化的全流程解决方案。通过动态加载策略、响应式布局和内存管理,实现跨平台稳定播放,适用于企业级直播应用开发。

weixin_29001655的博客 236

lua switch

lua实现switch 和 部分嵌套switch

qq_36248022的博客 1610

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

Lua中实现Switch功能

熟悉Lua的大家应该都知道,Lua中是没有Switch语法的,所以很多时候要条件判断的时候只有一条又一条的if 和elseif 去写,但是很多时候看上去很不直观,但是Lua的table类型其实相当强大。利用表结构和匿名函数,我们就可以实现Switch功能。 以下是在项目中的一段应用代码: function UIActivityTemp.SetPageUIInfoWithIndex(index...

OneWord233的博客 6740

毕设别再硬肝了:我用 GPT + Codex 做项目、写论文,效率直接起飞

这个也是神器。你项目做完之后,最怕的是老师一问就懵。这时候你直接把你的项目发给它,让它模拟老师提问。这是我的毕业设计题目和项目简介,请你站在答辩老师角度,提出20个高频问题,并给出简洁好背的回答。要求:问题尽量贴近计算机专业本科毕业答辩。为什么选这个题目?技术选型为什么这样定?你的创新点是什么?系统难点是什么?数据库怎么设计的?你的模型为什么选这个?如果继续优化,下一步怎么做?这个对答辩真的帮助很大。说实话,如果没有 GPT + Codex,

m0_74100417的博客 1846

C++开发基础之掌握常用的三种异步编程模型

以上是三种常见的C++异步编程模型,每种模型都有其适用的场景和特点。根据具体需求,你可以选择合适的模型来进行异步编程。

dotnet研习社 2176

[Lua]实现switch的一种方案

Lua实现switch的一种方案 欢迎前往个人博客驽马点滴和视频空间 哔哩哔哩-《挨踢日志》 if ... elseif ... end 形式 local ET_CASE_ONE = 1 local ET_CASE_TWO = 2 local function do_case_one( ... ) print("do_case_one") end local func...

humanxing的专栏 1万+

人机协作新纪元:AI会抢走IT人的饭碗吗?

产品经理用自然语言描述需求,AI将其转化为技术规格书(准确率已达89%)

819

Lua程序设计学习笔记(一) Lua基本语法(1)

Lua基本语法(一) 1.  开始 (1)基本常识 lua中的标识符可以由任意字母、数字、下划线构成的字符串,但不能以数字开头。 全局变量不需要申明,直接赋值即可创建,删除变量直接赋nil。未申明的变量不会报错,直接返回nil。 行注释以“--”开头;块注释以“--[[”开始,“]]”结束,重启块注释加“-”即可。(住:块注释需独占一行) (2)Lua解析器   在代码文件中第一行输入:#!...

墨、砚 2696

第四章:无感FOC的平滑启动艺术:告别“咔哒”声与抖动

无感FOC启动技术面临"先有位置还是先有旋转"的核心矛盾,导致常见故障包括位置失准、负载突变等。基础方案采用开环I/F控制,但存在重载启动困难等局限性。进阶方案结合IPD位置检测技术,通过脉冲电压注入法精准定位转子初始位置。关键技术在于开环到闭环的平滑切换,采用混合观测器设计和相位对齐技术。量产优化包括自适应参数整定和故障恢复机制,确保启动可靠性和一致性。该系统工程方案可有效解决启动抖动、异响等问题,提升用户体验。

汽车软件开发 738

前端Three.js面试题及参考答案

渲染循环(Render Loop)是 Three.js 中一个非常重要的概念,它是一个不断重复执行的过程,用于更新和渲染 3D 场景。在每次循环中,渲染循环会更新场景中的对象状态,如位置、旋转、缩放等,然后使用渲染器将更新后的场景渲染成 2D 图像显示在屏幕上。通过不断地重复这个过程,就可以实现动画效果。渲染循环的核心作用是确保场景能够实时更新,给用户带来流畅的视觉体验。如果没有渲染循环,场景将是静态的,不会有任何变化。只有通过不断地更新和渲染,才能让场景中的对象动起来,实现各种动画效果。

大模型大数据攻城狮的专栏 2722

lua实现switch功能

lua语言没有switch函数,但是可以通过if..else实现switch功能 function doSwitch(typ) if("v" == typ) then return "VISIT"; elseif("p" == typ) then return "PAGE"; elseif("c" =...

xichengxml的博客 1960

51单片机 DHT11温湿度传感器LCD显示+串口打印+Proteus仿真

DHT11+LCD1602+串口输出+Proteus仿真

perseverance51博客 7198

Lua实现switch-case

switch是啥?别多想,不是年会发的那玩意儿 ! Lua君说:虽然我没有case,但是我有switch啊,而且你还可以随意改名字,比如你爱慕已久的CuiHua~ 实际上switch同学像是一个表,丢给它一个a,它就把case:a对应的地址给你,丢给它一个b,它就把case:b对应的地址给你,丢给它一个c,人家说,不好意思啊哥,我这儿没有c,就走default了哈~ 既然是这样,我们就造个这样的表...

Mo_Mo123的博客 4386

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Lua中通过table实现switch

因为lua中没有switch,但是可以通过功能强大的table间接去实现类似的功能: 首先先定义个table: switch={}; 然后定义需要的case,就是table内的元素: switch[1] = function()...end switch[2] = function()...end switch[3] = function()...end switch[n] = function()...end 调用的时候就直接: switch[case](); 但是我们会发现可能存在switch[ca

qq_22038235的博客 875

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Lua的语法缺失及替代措施

Lua的一个设计方针是简单,能不加入的语言特性就尽量不加入。于是,Lua中缺少了一些我们常用的语法。下面仅以C语言做参考。缺少continue语句,虽然对逻辑实现没本质影响。但让我们在编程时,代码结构的写法有一些生硬的感觉,不灵活。缺少了switch-case语法,仅用if-elseif-else来替代,在选项比较多的时候,代码很难看,而且效率很低。没有逻辑运算符 AND, OR, NOT ,这在

天地沙鸥 - Csdn站 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

lua中实现switch以及sublime下自动补全switch语法

刚开始使用lua的人肯定会不满lua居然没有switch这个语法。 但是熟悉lua的强大特性之后,你会发现其实switch是完全没有必要提供的^.^,因为lua有强大的table和function 例子: [plain] view plain copy local key = 1   local switch = {     

imxiangzi的专栏 2473

C# Switch 的使用与 Lua Switch的实现

简单的switch

qq_30238537的博客 982

【lua】switch case

switch case 的 语法糖 local fs = (function(name,args) local sw = { ["#default"]=function() return " " end, ["functionName"]=function(args)return callback(name,args) en

u014787719的博客 1029

解决Lua语法缺失及替代措施

解决Lua语法缺失及替代措施是本文要介绍的内容,主要是来了解LUA语法的学习。Lua的一个设计方针是简单,能不加入的语言特性就尽量不加入。于是,Lua中缺少了一些我们常用的语法。下面仅以C语言做参考。缺少continue语句,虽然对逻辑实现没本质影响。但让我们在编程时,代码结构的写法有一些生硬的感觉,不灵活。缺少了switch-case语法,仅用if-elseif-else来替代,在选项比较多的时...

weixin_30246221的博客 122

lua中利用table表模拟switch

因为lua中没有switch,有滴童鞋可能觉得太多if elseif 看着难受,不过其实我们可以利用table去模拟switch的功能. 首先定义一个表 switch={} 然后定义各个分支 switch[1]=function()...end switch[a]=function()...end ... ... 然后调用 switch[var]() 记得后面的()不要忘记哦!\(^o^)/~

芒果布丁00的博客 1493

switch 语句设计

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138521的博客 171

Lua 语法实用技巧讲解

今天来讲一讲在日常开发lua中使用到的一些使用技巧。 本章会用c#来和lua对照着来讲。 首先第一个是C#的switch。在lua当中并没有switch,但是在lua当中我们可以使用table来实现。比如说C#代码是这样的: switch (n) { case 1: //do something break; case 2: //do something break;

weixin_44003966的博客 437

LUA 和 JAVA 的区别

没写完

干燥的空气,湿润的呼吸 1281

Lua学习笔记(1)

  最近在学Lua,看的是《Lua程序设计(第二版)》,似乎是唯一的中文资料了吧。且已经绝版,除了淘宝上能看到若干影印版外,其他的都找不到了。如果有朋友能找到正版的,请不吝相告 记录下初步的感受吧: 1.数据类型   Lua只有:nil(空)、boolean(布尔)、number(数值)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)、...

weixin_34362991的博客 65

lua学习

lua学习 lua简介 设计目的 为了嵌入到应用程序中,从而为应用程序提供灵活的扩展和定制功能 特性 可扩展 提供扩展接口和机制,通常扩展到c/C++中 轻量级 使用C语言编写,开源,编译后100k, 方便嵌入到别的程序中 自动内存管理 支持面向过程和函数式编程 应用场景 游戏开发 独立脚本 web应用脚本 扩展和数据库插件:Mysql 环境安装 IDE:SciTe 需要安装vc++2005sp1 ,去官网下载 vsCode 调试环境复杂,git上好多做luadeb

L1ak的博客 637
下一篇: lua-三元运算符的坑
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值