标签:
function CaseT(arg) local r = arg%10 function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (cond == r) then return proxy end return function() end end end function main() for i=1, 10 do local on = CaseT(math.random(0, i)) on(1) { yield = function(r) print("CaseT.callback", i, r) end } on(2) { yield = function(r) print("CaseT.callback", i, r) end } on(3) { yield = function(r) print("CaseT.callback", i, r) end } on(4) { yield = function(r) print("CaseT.callback", i, r) end } on(5) { yield = function(r) print("CaseT.callback", i, r) end } on(6) { yield = function(r) print("CaseT.callback", i, r) end } on(7) { yield = function(r) print("CaseT.callback", i, r) end } on(8) { yield = function(r) print("CaseT.callback", i, r) end } on(9) { yield = function(r) print("CaseT.callback", i, r) end } on(0) { yield = function(r) print("CaseT.callback", i, r) end } end end main()
当尝试完这样的语法糖后,猛然才觉察出这里的Case执行并不能完成中断,根本就不叫switch case...
值得反思的是,支持面向对象组织的语言是不是都不提倡case 分解,而是提倡种类分型,不断向正确描述事务流程而精益求精。
标签:
原文地址:http://www.cnblogs.com/qianwen36/p/4902559.html