lua 구현 switch

9944 단어

선행 코드:
 1 function switch(val)
 2   local function innerfunc(t)
 3     for k,v in pairs(t) do
 4       if k == val then
 5         if type(v) == "function" then 
 6           return v()
 7         elseif type(v) == "thread" then
 8           return coroutine.resume(v)
 9         else
10           return v
11         end
12       end
13     end
14   end
15   return innerfunc
16 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 대신 [lee] = say No를 사용하면'no'도 인쇄됩니다.
 
--[[
편리한 함수 패키지 func를 제공합니다. 그는 함수를 실참과 함께 포장하는 기능을 실현했고, 반환값은 function입니다.
예를 들면 다음과 같습니다.
  local prtNm = packfunc(print,"name")
prtNm () -- 인쇄:name
]]
 1 function packfunc(func,...)
 2   local _argsSuper = {...}
 3   local _c1 = select("#",...)
 4   local function innerFunc(...)
 5     local args = {...}
 6     local argsOut = {unpack(_argsSuper,1,_c1)}
 7     for i,v in pairs(args) do
 8       argsOut[_c1 + i] = v
 9     end
10     return func(unpack(argsOut,1,table.maxn(argsOut)))
11   end
12   return innerFunc
13 end

 
따라서 위의 switch 문은 다음과 같이 단순화할 수 있습니다.
 1 local name = "leo"
 2 
 3 swtich(name){
 4 
 5   ["lee"] = packfunc(print,"no"),
 6 
 7   ["leo"] = packfunc(print,"hello"),
 8 
 9   ["woof"] = packfunc(print,"woof"),
10 
11 }

 
또한 switch number:
local age = 13

local ret = switch(age) {

[1] = "baby",

[13] = "boy",

[33] = "man",

}

print(ret)--boy

 
전재 대상:https://www.cnblogs.com/leosfly/p/5929193.html

좋은 웹페이지 즐겨찾기