我的.vimrc中有两个函数:
function! DoStuff()
...
endfunction
function! DoStuffWrapper(func)
...
func
...
endfunction
nnoremap <Leader> ...
基本上是有效的。但我不确定这是否是正确的做法。是否有更好的替代方法可以在另一个函数中传递一个函数?
我看到了像
这样的方法function! AFunction()
...
:call call (function('FunctionName'), params)
...
endfunction
但这似乎只在使用函数名而不是参数时起作用。
答案 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
。