Vim の辞書関数が強化されてて驚いた

さて、辞書関数といえば以前は call() を介さないと呼び出すことは出来ませんでした。

let dict = { "value" : 3 }
function! dict.add(a)
    return self.value + a:a
endfunction

let F = dict.add

" call() を介して辞書を指定する必要があった
echo call(F, [2], dict)
" => 5

" 任意の辞書を指定することもできる
echo call(F, [2], { "value" : -3 })
" => -1

[最新版では]

最新版では call() を介さずに直接呼び出すことが出来ます。

let dict = { "value" : 3 }
function! dict.add(a)
    return self.value + a:a
endfunction

let F = dict.add

" 直接呼び出すことができる
echo F(2)
" => 5

これ、地味なんですがかなりすごくて、前々からこういう風に使いたかったんですよねえ。

[おまけ]

最新版では get() で辞書関数が束縛してる辞書の値が取得できます。

let dict = { "value" : 3 }
function! dict.add(a)
    let self.value += a:a
endfunction

let F = dict.add
call F(1)
call F(2)
call F(3)
echo get(F, "dict")
" => {'add': function('2379'), 'value': 9}

やばい。