Как понять `{'key: function('1')}` в VimScript?

В последнее время я предпочитаю плагин Vim под названием Vundle. в словаре с именем g:bundle есть элемент:

{'path': function('1')}

Если я вызову item.path(), Vundle может вызвать «s:bundle.path()» в vundle/config.vim:

func! s:bundle.path()
    return s:expand_path(g:bundle_dir.'/'.self.name)
endf

Итак, не могли бы вы рассказать мне об использовании параметра "1" анонимной функции в Vimscript?


Обновлено:

Спасибо за мистера Карката.

Я использую команду :function {1}, результат которой:

function 1() dict                                                                                                                                                          
    return s:expand_path(g:bundle_dir.'/'.self.name)
endfunction

функциональный блок такой же, как s:bundle.path(), он доказывает, что число в фигурных скобках означает Funcref:

Затем функция получит номер, а значение dict.len — это Funcref, который ссылается на эту функцию. Функцию можно использовать только через Funcref. Он будет автоматически удален, когда не останется Funcref, ссылающегося на него.

Ссылка:

https://github.com/gmarik/Vundle.vim/blob/master/autoload/vundle/config.vim#L106 http://vimdoc.sourceforge.net/htmldoc/eval.html#Dictionary-function


person leiming    schedule 07.03.2014    source источник


Ответы (1)


Вы видите функцию анонимного словаря. Это означает, что для Словаря {'path': function('1')} (назовем его foo, и мы знаем, что это элемент g:bundles) было определено следующее:

let foo = {}
function foo.path() dict
    return "foo"
endfunction

Вы можете узнать больше об определении функции через

:function {1}
person Ingo Karkat    schedule 07.03.2014
comment
Думает, но я не могу найти definition function 1() dict в исходниках, какой блок совпадает с блоком s:bundle.path(). Они связаны через {'path': function('1')} ? - person leiming; 07.03.2014
comment
Я не вижу связи s:bundle.path() с g:bundless и списком, а не с тем, что вы написали в своем вопросе). - person Ingo Karkat; 07.03.2014
comment
Я добавляю детали к основной части вопроса именно тогда. - person leiming; 07.03.2014