lua 구현 switch
선행 코드:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.