Eu quero fazer uma função que tenha argumentos opcionais.
Em python, eu faria algo assim:
def functionName(arg1,arg2=false,arg3=false):
if arg2:
#Do stuff with arguments
else:
#Do stuff without arguments
Eu tentei fazer function FunctionName(arg1,arg2=false,arg3=false)
, mas isso apenas me dá um erro dizendo argumento inválido.
Como eu faria isso no vimscript?
let a:arg=
mais fazer no vim. Você deve usar algo comolet l:arg=
ou apenaslet arg=
. Veja github.com/vim/vim/commit/…Esse padrão permitirá atribuir nomes significativos a cada argumento e fornecer um valor padrão para todos os argumentos que não foram fornecidos:
Como apontado por Boris Brodski:
condition ? result_if_true : result_if_false
é a expressão condicional (ternária), avaliada para o segundo ou terceiro termo, dependendo se o primeiro termo era verdadeiro ou não.Portanto, se nenhum terceiro argumento for fornecido,
baz
assumirá o valor padrão de0
.Uma preocupação com o exemplo acima é que só
a:foo
pode ser acessado com o prefixo, enquanto e pode ser feito sem um prefixo. Como isso não é muito consistente, você pode preferir extrair todos os argumentos para variáveis locais, como:a:
bar
baz
(Tecnicamente, você pode usar o
l:
prefixo para se referir a variáveis locais dentro de uma função, por exemplol:baz
, mas isso é redundante, portanto eu não o recomendaria.)Mas eu recomendo que você use este formulário sempre que possível:
O
!
permite redefinir sua função no tempo de execução (por exemplo, recarregando o script) es:
limita a função ao escopo do script. Isso evita poluir o espaço para nome global (e arriscar colisão) se sua função for referenciada apenas de outro lugar dentro do script. Geralmente, é a maneira preferida de definir funções quando elas não precisam ser visíveis globalmente. ;-)fonte
a:0
não inclui os parâmetros nomeados fixos.a:1
é o primeiro parâmetro dentro do...
(Just testado com VIM 8.0)Não sou versado em vimscript, mas é assim que eu faria:
Você pode
call Func("Hello", "World")
ver que ele exibe "Olá", "Mundo", "Baz não especificado".Isso está usando o recurso varargs das funções do vim, que permite passar um número arbitrário de argumentos extras para a função. Os argumentos são armazenados em variáveis que, dependendo do
a:0
(comprimento da lista de argumentos extras), são definidas para o argumento correspondente ou para um valor padrão.fonte
Desde o Vim 8.1.1310, o Vim também suporta argumentos reais de funções opcionais.
No entanto, isso significa que a maioria das instalações do vim ainda não suporta isso. O neovim também não oferece esse recurso também.
Exemplo de
:help optional-function-argument
:fonte