1

我的 .vimrc 中有两个函数:

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 回答