Lua里的"switch-case"语句
2013-08-05 17:14
369 查看
Lua本身并没有提供switch-case语句,难道说我们就只能靠不断的"if ... elseif ... "这样冗长的方式来实现选择的功能么?当然不是这样的。Lua提供了功能强大的metatable,我们可以选取任意的数据类型作为table的索引类型和元素类型。而实质上在C语言中,switch-case语句是根据不同的情况(参数的值)来选择执行不同的动作,数组则是根据不同的下标返回对应的数据。如果函数可以作为一种数据类型存在,那么很明显switch-case语句只是生成了一个元素类型是函数的数组而已(其实C编译器也确实是这么做的)。在Lua里函数确实是一种数据类型, 所以自然而然就可以像下面这样写出:
print "Hello, switch-case" local switch = { [1] = function() -- for case 1 print "Case 1." end, [2] = function() -- for case 2 print "Case 2." end, [3] = function() -- for case 3 print "Case 3." end } local a = 4 local f = switch[a] if(f) then f() else -- for case default print "Case default." end
相关文章推荐
- Lua里的"switch-case"语句
- Sql语句在Access数据库中能查到结果, 写在程序中查不到结果(或者得到的结果全是0) --- 通配符的问题, Access的"case when"
- php switch case的"bug"
- 尚未备份数据库 "TEST" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPL
- 在switch中的case语句中声明变量
- Python为什么没有switch/case语句?
- C语言中switch case语句的实现
- C语言之switch case语句 case 中没有break时会继续执行下一个case无论条件是否满足都会执行
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- 消除switch/case语句,不破坏代码的封闭性,使程序结构更符合面向对象思想(二)
- switch 语句:error : crosses initialization of 'xxx' and jump to case label [-fpermissive]
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- switch语句中得case
- switch-case语句用法
- 详解Swift的switch...case语句中break关键字的用法
- 【JAVA基础】switch case语句用法
- java_switch-case语句
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- C++编程学习-Switch-case语句
- 【编程题目】求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句