読者です 読者をやめる 読者になる 読者になる

Vim script で辞書関数から辞書関数を呼び出すときの問題の回避方法

昨日の続き 昨日は function() を利用して辞書を束縛したのですが、もうちょっと簡単な回避方法があります。

[辞書関数を配列として保持する]

let s:A = {}

function! s:A.call()
   " self は s:A になる
    echo "self is s:A :" self is s:A
    echo "self is s:B :" self is s:B
endfunction

let s:B = {}

" 配列として代入する
let s:B.call = [s:A.call]
call s:B.call[0]()
" output:
" self is s:A : 1
" self is s:B : 0

要は辞書関数を直接呼び出すのが問題なので配列として扱うことで self が代入した辞書の値になりません。
上のコードだとちょっと不格好なのですが、まあ回避方法としては結構簡単になります。