vim script で eval
vim script では eval 関数を使用して script の評価を行う事ができます。
[ソース]
function! s:lambda(expr) let self = {} let self.expr = a:expr function! self.apply(...) return eval(self.expr) endfunction return self endfunction function! s:main() " 数値を評価して返す echo eval("42") echo eval("22 + 20") " '' で囲めば文字列も評価できる echo eval("'hoge'.'foo'") let a = 10 let b = 32 " ローカル変数も使用できる echo eval("a + b") " こんな事も…! let plus_10 = s:lambda("map(a:1, 'v:val+10')") echo plus_10.apply([1, 2, 3]) " ただし、ローカル変数は使えない let plus_a = s:lambda("map(a:1, 'v:val+a')") " 評価されるスコープが違うので、a が未定義になる " echo plus_a.apply([1, 2, 3]) endfunction call s:main()
[出力]
42 42 hogefoo 42 [11, 12, 13]