Vim script で lambda を使用する際の注意
@pink_bangbi lambda式をパースする際に、外側のスコープにアクセスしている変数が1つでもあるかチェックしています。なければキャプチャはしません。で、文字列の中まではパースしないのでそういう動作になってしまいます。
— K.Takata (@k_takata) 2016年8月25日
と、いうことなので次のような lambda も上手く動作しません。
function! s:main() let value = 2 let F = { xs -> filter(xs, "v:val % value == 0") } " Error: E121: 未定義の変数です: value echo F(range(1, 10)) let F = { xs -> filter(xs, "v:val + value") } " Error: E121: 未定義の変数です: value echo F(range(1, 10)) endfunction call s:main()
明示的に変数を指定してキャプチャする機能がほしくなりますね。