【发布时间】:2020-03-03 09:31:47
【问题描述】:
我有如下形式的函数:
function! s:my_function(dict_arg)
let darg = copy(a:dict_arg)
func! my_inner_func(cond)
if a:cond ==# 'a'
execute darg.a
elseif a:cond ==# 'b'
execute darg.b
elseif a:cond ==# 'c'
execute darg.c
endif
endfunc
return function('my_inner_func')
endfunc
传递给dict_arg 参数的参数将是一些以a、b 和c 为键的dict,它们各自的值是表示将根据特定@987654326 执行的Ex 命令的字符串@(条件)。
外部函数 s:my_function 的目的是生成一个 Funcref,该函数将基于 cond 执行适当的 Ex 命令(darg.a、darg.b 或 darg.c),它本身在其他地方由其他变量。
所以我的问题是我不知道如何从my_inner_func内部引用s:my_function范围内定义的局部变量darg。当函数被调用时,我得到错误E121: Undefined variable: darg。如果我没有定义局部变量darg,它也不起作用(同样的错误),而只是尝试做execute a:dict_arg.b。
我可以通过将darg 定义为全局来解决它,如let g:darg = copy(a:dict_arg),然后再定义execute g:darg.a。但当然,我想避免这种情况。
在 Python 之类的东西中,这种类型的词法范围解析是自动的。但是 VimL 很好.. VimL。任何帮助或指点将不胜感激。
【问题讨论】:
标签: vim scope closures scoping