Vim script でパターンマッチ的な書き方
なんか前も書いたような気がしますが、関数名にパターンを記述してゴニョゴニョします。
[ソース]
function! s:apply(expr, ...) let expr = a:expr."_".join(a:000, "_") return call(exists("*".expr) ? expr : a:expr, a:000) endfunction function! s:fact_1(...) return 1 endfunction function! s:fact(n) return a:n * s:apply("s:fact", a:n-1) endfunction echo s:fact(4) function! s:fizzbuzz_0_0(value) echo a:value endfunction function! s:fizzbuzz_1_0(...) echo "Fizz" endfunction function! s:fizzbuzz_0_1(...) echo "Buzz" endfunction function! s:fizzbuzz_1_1(...) echo "FizzBuzz" endfunction for v in range(1, 30) call function("s:fizzbuzz_".(v%3==0)."_".(v%5==0))(v) endfor
[出力]
24 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz
整数であれば、これでもいいかも知れませんが、それ以外([]とか)だと無理なので悩ましい。
やはり呼び出し側でもうちょっと工夫する必要がありますねぇー。