将函数作为参数传递给.vimrc中的另一个函数

时间:2013-03-24 19:54:19

标签: function vim arguments

我的.vimrc中有两个函数:

function! DoStuff()
    ...
endfunction

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

nnoremap <Leader> ...

基本上是有效的。但我不确定这是否是正确的做法。是否有更好的替代方法可以在另一个函数中传递一个函数?

我看到了像

这样的方法
function! AFunction()
    ...
    :call call (function('FunctionName'), params)
    ...
endfunction

但这似乎只在使用函数名而不是参数时起作用。

1 个答案:

答案 0 :(得分:2)

您可以执行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