Lua 實現switch的一種方案

2021-06-27 23:30:05 字數 2014 閱讀 5361

local et_case_one = 1

local et_case_two = 2

local function do_case_one( ... )

print("do_case_one")

endlocal function do_case_two( ... )

print("do_case_two")

endlocal function do_default()

print("do_default")

endfunction switch(case)

if case == et_case_one then

do_case_one()

elseif case == et_case_two then

do_case_two()

else

do_default()

endend

但是這種形式判斷的效率是比較低下的, 對於每乙個case, 最壞的情況是要判斷所有的可能,然後進到 do_default, 因此有這樣的改進:

local const_et_calse_handle_func_list = 

function switch(case)

if const_et_calse_handle_func_list[case] then

return const_et_calse_handle_func_list[case]()

else

return do_default()

endend

但是這樣會很不舒服, 因為操作函式一部分寫在了操作函式表中,而default部分卻要寫在switch函式中,這樣導致業務邏輯維護的不集中,超級不爽的,是吧!

因此,我們希望,在表中找不到對應的case時,能夠返回default處理函式

local const_et_calse_handle_func_list = 

switch_metatable =

setmetatable(const_et_calse_handle_func_list, switch_metatable)

function switch(case)

return const_et_calse_handle_func_list[case]()

end

這個要求有這樣的前提: 表的__default必須持有乙個function型別的值.

local switch_metatable = 

function switchgenerator(tbl)

tbl = tbl or {}

setmetatable(tbl, switch_metatable)

return function(case)

return tbl[case]()

end, tbl

endfunction test()

local et_case_one = 1

local et_case_two = 2

local function do_case_one( ... )

print("do_case_one")

endlocal function do_case_two( ... )

print("do_case_two")

endlocal function do_default()

print("do_default")

endlocal switch, tbl = switchgenerator()

local function realtest()

for i=1,3 do

switch(i)

endend

realtest()

tbl[3] = function() print("new add case") end

realtest()

endtest()

C C 中switch用法的一種替換方式

在c c 中,switch語句是經常被用到的,當switch內的case語句較多時程式有時顯得比較繁亂,此種情況下可以用另外一種實現方式替代switch。詳細用法見例子 include stdafx.h float addfunc float a,float b float subfunc floa...

C C 中switch用法的一種替換方式

在c c 中,switch語句是經常被用到的,當switch內的case語句較多時程式有時顯得比較繁亂,此種情況下可以用另外一種實現方式替代switch。詳細用法見例子 include stdafx.h float addfunc float a,float b float subfunc floa...

一種基於ccs3的timeline實現方法

該控制項的實現過程較為簡單,主要由test.html檔案和timeline.css檔案組成。具體 如下 1 標題一label class date t1span class circle span div class content 長安元年 701年 李白,字太白。其生地今一般認為是唐劍南道綿州 ...