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年 李白,字太白。其生地今一般認為是唐劍南道綿州 ...