Quando é recomendável usar o escopo s: e o argumento abortar para definir uma função?

7

Ao definir uma função, é sempre recomendável usar o escopo s:para torná-lo local para o script e evitar a substituição de uma função com o mesmo nome no espaço para nome global?
E é sempre recomendável usar o argumento abortcaso a função detecte um erro?

function! s:SomeFunction() abort
    echo "hello world!"
endfunction

O escopo s:parece uma coisa boa, mas torna o código um pouco mais detalhado, porque cada vez que quero chamar SomeFunction()de um mapeamento, tenho que prefixá-lo com <SID>:

nnoremap {lhs} :<c-u>call <SID>SomeFunction()<cr>

Ou mesmo para armazenar sua saída dentro de uma variável:

let myvar = <SID>SomeFunction()

Existem casos específicos em que você não deseja usar s:e / ou abort?
Se sim, por que razões?

saginaw
fonte

Respostas:

6

A s:significa simplesmente que você não está poluindo o namespace global. Normalmente, você faria isso se for uma função que não precise ser chamada pelo usuário. Quanto à abortbandeira, aqui está o que os documentos :help :func-abortdizem:

Quando o argumento [abort] for adicionado, a função será cancelada assim que um erro for detectado.

Se a sua função não faz nenhuma configuração e não quebra nada se não puder ser desativada quando um erro for encontrado, provavelmente seria bom usá-la. (ou seja, se você deseja abortar silenciosamente se ocorrer um erro)

EvergreenTree
fonte
Eu acho que a melhor prática seria sempre usar aborte usar um try/ finallypara qualquer desmontagem necessária. Não é esse o caso?
ivan