1

.vimrcには2つの関数があります。

function! DoStuff()
    ...
endfunction

function! DoStuffWrapper(func)
    ...
    func
    ...
endfunction

nnoremap <Leader> ...

基本的には機能します。しかし、それが正しいことかどうかはわかりません。関数を別の関数内に渡すためのより良い代替手段はありますか?

私は次のようなアプローチを見ました

function! AFunction()
    ...
    :call call (function('FunctionName'), params)
    ...
endfunction

しかし、それは関数名を使用している間だけ機能し、引数は機能しないようです。

4

1 に答える 1

3

call DoStuffWrapper(DoStuff())ただし、関数をラッパーに渡すのではなく、の結果を渡すことはできます。これについて考えてください:あなたと同じ状況。DoStuff()DoStuff()echo len(getline('.'))

この例で少し説明できるといいのですが。

fun! Sq(val)
    return a:val*a:val
endf


fun! SqRoot(val)
    return sqrt(a:val)
endf

fun! CalcFunc(val, func)
    echo a:func(a:val)
endf

CalcFuncしたがって、動的計算を実行できるように、関数をに渡します。

今あなたがするなら:

call CalcFunc(2, function('SqRoot'))

エコーします1.414214

そしてあなたがそうするなら:

call CalcFunc(2, function('Sq'))

エコーし4ます。

于 2013-03-24T20:55:18.810 に答える