lua实现switch

先上代码:

function switch(val)
  local function innerfunc(t)
    for k,v in pairs(t) do
      if k == val then
        if type(v) == "function" then
          return v()
        elseif type(v) == "thread" then
          return coroutine.resume(v)
        else
          return v
        end
      end
    end
  end
  return innerfunc
end

之后可以这样用:

local function sayHello()

  print("hello")

end

local function sayNo()

  print("no")

end

local name = "leo"

local ret = switch(name) {

  ["lee"] = sayNo,--此处value可以是任何类型:nil、number、function、table、thread、userdata、string、boolean,如果是function或者thread,则先执行再返回,其他类型直接返回

  ["leo"] = sayHello,

  ["woof"] = function() print("woof") end,

}  --打印:hello

注意:

在switch中,如果使用["lee"] = print("no")代替["lee"] = sayNo会使“no”也被打印出来。

--[[再提供一个方便的函数packfunc,他实现了把函数跟实参打包在一起的功能,返回值是一个function。

比如:

local prtNm = packfunc(print,"name")

prtNm() -- 打印:name

]]

function packfunc(func,...)
  local args = {...}
  local function innerfunc()
    return func(unpack(args))
  end
  return innerfunc
end

于是,上面的switch语句可以简化如下:

local name = "leo"

swtich(name){

  ["lee"] = packfunc(print,"no"),

  ["leo"] = packfunc(print,"hello"),

  ["woof"] = packfunc(print,"woof"),

}

也可以switch number:

local age = 13

local ret = switch(age) {

[1] = "baby",

[13] = "boy",

[33] = "man",

}

print(ret)--boy

时间: 2024-10-07 06:32:55

lua实现switch的相关文章

[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 function do_case_two( ... ) print("do_case_two") end local function do_default() pri

转载:lua中switch

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

Lua中的常用语句结构以及函数

1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {"hello", 10} if nil ~= gTable[1] and "hello" == gTable[1] then print("gTable[1] is" , gStringTable[1]) elseif 10 == gTable[2] then print("gTable[2] is", gTable[2]) else prin

Lua脚本之语法基础快速入门

要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句结构介绍 三.Lua中的库函数 Lua的语法基础超级简单,非常易于上手,下面总结一些学习过程中的Lua语法基础: 在开始学习之前,先介绍一些最基本的概念,在Lua中具有一个代码块的概念,每个函数或者for循环等都是一个代码块.在Lua中,用 “- - ”来标记该行的注释,使用“- - [ [” 和

http://www.runoob.com/lua/lua-basic-syntax.html

Lua优点及特性 Lua 是一个小巧的脚本语言. 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行.Lua并没有提供强大的库,这是由它的定位决定的.Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能. Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用.不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格

ngx lua模块源码简单解析

ngx lua模块源码简单解析分类: nginx 2014-07-11 11:45 2097人阅读 评论(0) 收藏 举报nginxlua数据结构架构目录(?)[+]对nginx lua模块的整个流程,原理简单解析.由于nginx lua模块相关配置,指令,API非常多,所以本文档只以content_by_lua指令举例说明. 读本文档最好配合读源码. 不适合对nginx和lua一点都不了解的人看.1.相关配置详细配置见 https://github.com/openresty/lua-ngin

lua 语句学习

版本:1.0 日期:2014.5.17 2014.6.1 版权:© 2014 kince 转载注明出处 在介绍SwitchButton之前,先来看一下系统Button是如何实现的.源码如下: @RemoteView public class Button extends TextView { public Button(Context context) { this(context, null); } public Button(Context context, AttributeSet att

nginx+lua打造10K qps+的web应用

背景篇 由于项目流量越来越大,之前的nginx+php-fpm的架构已经难以承受峰值流量的冲击,春节期间集群负载一度长时间维持0%的idle,于是这段时间逐渐对旧系统进行重构. 受高人指点,发现lua这个好东西.因此在技术选型上,我们使用lua代替部分的php逻辑,比如请求的过滤.lua是一种可以嵌入nginx配置文件的动态语言,结合nginx的请求处理过程(参见另一篇博文),lua可以在这些阶段接管请求的处理. 我们的环境使用openresty搭建,openresty包括了很多nginx常用扩

【quick-cocos2d-x】Lua 语言基础

版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速便捷了许多,下文只是lua这门语言的一个基础知识点,没有涵盖整个Lua的内容,但是作为对lua入门的初步了解还是可以的,由于内容精简了不少,所以语言上可能会有点跳跃,但是问题不大. 要了解一门语言,首先要了解的是语言的标识符.保留字.常量和变量,命名规范和注释以及数据类型等.然后是运算符.控制流语句