我在运行时在execute/eval
'd 字符串中创建一个动态函数。该函数是根据调用生成器函数时存在的不同变量构建的。生成器函数如下,
function! NewCallback(method, opts)
let my_opts = a:opts
let function_name = "g:MyDynamicFunction_" . a:method
let body = "function! " . function_name . "(...)\n"
let body .= " echo 'running " . function_name . "'\n"
let body .= " echo my_opts\n"
let body .= "endfunction"
execute body
return function_name
endfunction
我正在使用这个功能,如下所示。首先,我创建了一个回调,它给出了作为结果生成的函数的名称。然后我用 :call 调用这个函数。
let callback = NewCallback('foo', { 'a': 1, 'b': 2 })
execute(":call " . callback . "(1, 2, 3)")
我遇到的问题是在生成的函数内访问 NewCallback 范围内的变量。在这里,我需要访问生成函数内部的my_opts
本地。NewCallback
MyDynamicFunction_foo
目前它给了我undefined variable my_ops
有没有办法在 viml 中做到这一点。ie:- 定义可以访问父作用域的闭包函数?
谢谢。