Por que meus métodos dict funcionam bem sem definir com argumento extra 'dict'? [vim]

0

Meu trecho de código se parece com:

:let ClassZ = {'author': "Juchen.Zeng"}
:function ClassZ.Print_author_name()
:    echo self.author
:endfunction

:function ClassZ.Change_author_name(arg1)
:    let self.author = a:arg1
:endfunction

:call ClassZ.Print_author_name()

Juchen.Zeng

:call ClassZ.Change_author_name('MarioLuisGarcia')
:call ClassZ.Print_author_name()

MarioLuisGarcia

E no documento oficial do vim, diz:

    :function uk2nl.translate(line) dict
    :  return join(map(split(a:line), 'get(self, v:val, "???")'))
    :endfunction

Vamos primeiro experimentar:

    :echo uk2nl.translate('three two five one')
    drie twee ??? een

A primeira coisa especial que você nota é o "dict" no final da "função": linha. Isso marca a função como sendo usada em um Dicionário. O "eu" a variável local então se referirá àquele Dicionário.

Por que em meus exemplos, sem argumento dict extra, a auto referência parece funcionar bem? Este dict arg é indispensável?

    
por Zen 14.08.2015 / 15:35

1 resposta

2

O atributo dict é dispensável neste caso, porque definir e atribuir a função diretamente ao atributo dict do dicionário para a função, usando o atributo dict , não é mais necessário.

Esse tipo de função é chamado de função anônima ou função numerada .

No seu exemplo, você definiu duas chaves ClassZ , Change_author_name e Print_author_name que têm valores Funcref .

Você pode verificá-lo usando function () :

:function ClassZ.Print_author_name
   function 394() dict
1  echo self.author
   endfunction

Você pode ver que numbered-function - 394 foi criado com o atributo dict .

    
por 14.08.2015 / 20:18

Tags