48498


少し前にluaを始めた初心者なのですが、条件分岐について詳しく知りたいので質問させていただきます。

とあるプログラムを書いていたところ下記のようなことをさせたいと思ったのですが、そのままifなどで書くと凄まじい長さになったしまうので何かいい方法はないでしょうか？

引数が1の時はA  
2の時はAとB  
3の時はAとBとC  
4の時はAとBとCとD…  
と言った感じです。  
ただし実際はAとかBとかといった部分に規則性がありません。

今のコードは以下のものです。

[code]

    color_set1 = colors.combine(colors.white)
    color_set2 = colors.combine(colors.white, colors.orange)
    color_set3 = colors.combine(colors.white, colors.orange, colors.magenta)
    color_set4 = colors.combine(colors.white, colors.orange, colors.magenta, colors.lightBlue)
    color_set5 = colors.combine(colors.white, colors.orange, colors.magenta, colors.lightBlue, colors.yellow)
    color_set6 = colors.combine(colors.white, colors.orange, colors.magenta, colors.lightBlue, colors.yellow, colors.lime)
    
    
    function RS(nmb)
        local cmd = {}
        cmd["1"] = "\"left\",color_set1"
        cmd["2"] = "\"left\",color_set2"
        cmd["3"] = "\"left\",color_set3"
        cmd["4"] = "\"left\",color_set4"
        cmd["5"] = "\"left\",color_set5"
        cmd["6"] = "\"left\",color_set6"
        cmd["7"] = "\"top\",color_set1"
        cmd["8"] = "\"top\",color_set2"
        cmd["9"] = "\"top\",color_set3"
        cmd["10"] = "\"top\",color_set4"
        cmd["11"] = "\"top\",color_set5"
        cmd["12"] = "\"top\",color_set6"
        cmd["13"] = "\"back\",color_set1"
        cmd["14"] = "\"back\",color_set2"
        cmd["15"] = "\"back\",color_set3"
        cmd["16"] = "\"back\",color_set4"
        cmd["17"] = "\"back\",color_set5"
        cmd["18"] = "\"back\",color_set6"
        cmd["19"] = "\"bottom\",color_set1"
        cmd["20"] = "\"bottom\",color_set2"
        cmd["21"] = "\"bottom\",color_set3"
        cmd["22"] = "\"bottom\",color_set4"
        cmd["23"] = "\"bottom\",color_set5"
        cmd["24"] = "\"bottom\",color_set6"
        cmd["25"] = "\"front\",color_set1"
        cmd["26"] = "\"front\",color_set2"
        cmd["27"] = "\"front\",color_set3"
        cmd["28"] = "\"front\",color_set4"
        cmd["29"] = "\"front\",color_set5"
        cmd["30"] = "\"front\",color_set6"
    
        if nmb <= 6 then
            rs.setBundledOutput(cmd[nmb])
        elseif nmb >= 7 and nmb <= 12 then
            rs.setBundledOutput(cmd[6])
            rs.setBundledOutput(cmd[nmb])
        elseif nmb >= 13 and nmb <= 18 then
            rs.setBundledOutput(cmd[6])
            rs.setBundledOutput(cmd[12])
            rs.setBundledOutput(cmd[nmb])
        elseif nmb >= 19 and nmb <= 24 then
            rs.setBundledOutput(cmd[6])
            rs.setBundledOutput(cmd[12])
            rs.setBundledOutput(cmd[18])
            rs.setBundledOutput(cmd[nmb])
        elseif nmb >= 25 and nmb <= 30 then
            rs.setBundledOutput(cmd[6])
            rs.setBundledOutput(cmd[12])
            rs.setBundledOutput(cmd[18])
            rs.setBundledOutput(cmd[24])
            rs.setBundledOutput(cmd[nmb])
        end
    end
    
[/code]


CC BY-SA 4.0
2018-09-17T07:59:18.873
48478
2018-09-19T06:41:30.550
2018-09-19T06:41:30.550
19110
30137
question
lua
引数の数値に応じて実行する処理を増やしたい


先頭のN個の要素に何か行なうのだと考えました。下は `print` する例です。

[code]

    function print_first_n(list, n)
        for i,v in ipairs(list) do
            if i > n then
                break
            end
            print(v)
        end
    end
    
    local choices =  {"A", "B", "C", "D"}
    print_first_n(choices, 3)
    --[[ 出力:
    A
    B
    C
    --]]
    
[/code]

先頭のN個の要素を引数として一度だけ関数を実行するなら下のようにできます。

[code]

    function print_once_first_n(list, n)
        print(table.unpack(list, 1, n))
    end
    
    local choices =  {"A", "B", "C", "D"}
    print_once_first_n(choices, 3)
    --[[出力
    A   B   C
    --]]
    
[/code]

参考: [table.unpack](http://milkpot.sakura.ne.jp/lua/lua53_manual_ja.html#pdf-
table.unpack)、[Multiple Results（英語）](http://www.lua.org/pil/5.1.html)


CC BY-SA 4.0
2018-09-18T05:16:09.157
48498
2018-09-18T14:15:53.733
2018-09-18T14:15:53.733
3054
3054
48478
answer