Vim script の lambda で外部変数をキャプチャしたかった
Vim script の lambda で外部の変数を参照したかったのですが、どうやらこれはエラーになるみたいです。
function! s:main() let a = 3 let F = { b -> a + b } echo F(2) " => E121: 未定義の変数です: a endfunction call s:main()
まあ :function
で定義した関数もスコープ外の変数は参照できないからそういう挙動なのかな?
[回避方法]
こういう場合はカリー化、カリー化する。
function! s:main() let a = 3 let F = function({ a, b -> a + b }, [a]) echo F(2) " => 5 endfunction call s:main()
この場合は参照ではなくてコピーになるので注意(後から a
を変更してもカリー化後の関数には反映されない
[使用した vim のバージョン]
- 7.4.2067