Luaの「switch-case」文

3648 ワード

Lua自身はswitch-case文を提供していないが、私たちは絶えず「if...elseif...」に頼るしかないのだろうか.このような冗長な方法で選択の機能を実現しますか?もちろんそうではありません.Luaは強力なmetatableを提供し、tableのインデックスタイプと要素タイプとして任意のデータ型を選択することができます.実質的にC言語ではswitch-case文は異なる場合(パラメータの値)に応じて異なる動作を選択して実行し,配列は異なる下付き文字に基づいて対応するデータを返す.関数がデータ型として存在する場合、switch-case文は要素型が関数の配列であることを生成しているだけであることは明らかです(実際にはCコンパイラもそうしています).Luaでは関数は確かにデータ型なので、自然と次のように書くことができます.
 1 print "Hello, switch-case"
 2 
 3 local switch = {
 4     [1] = function()    -- for case 1
 5         print "Case 1."
 6     end,
 7     [2] = function()    -- for case 2
 8         print "Case 2."
 9     end,
10     [3] = function()    -- for case 3
11         print "Case 3."
12     end
13 }
14 
15 local a = 4
16 local f = switch[a]
17 if(f) then
18     f()
19 else                -- for case default
20     print "Case default."
21 end