2013-08-15 11 views
9

C'è un modo per chiamare una funzione vim con un elenco di argomenti. La mia lista di argomenti proviene da argomenti splat opzionali in un'altra funzione, e ho bisogno di un modo per passare questi argomenti alla funzione di destinazione.Chiama una funzione con argomenti lista o splat

La funzione target è,

function! run_hello(cmd, ...) 
    echo 'run_hello' 
    echo a:cmd 
    echo a:000 
endfunction 

La funzione che chiameremo run_hello è,

function! hello(...) 
    call run_hello('foo', the splats here) 
endfunction 

Si chiamerà questo modo, con argomenti diversi.

call hello('lorem', 'ipsum', 'dolor') 

Attualmente sto usando hello(arglist) e passando la lista a:000 avanti. Ma mi piacerebbe sapere se è possibile chiamare una funzione con un elenco come argomenti, che poi diventa la sua lista di argomenti regolari.

Qualcosa di simile a JavaScript,

foo.apply(this, ['a', 'b', 'c'] 

Grazie.

risposta

14

L'equivalente di apply() di JavaScript è call() in Vimscript:

function! hello(...) 
    call call('run_hello', ['foo'] + a:000) 
endfunction 

questo non è un errore di battitura: È :call la funzione denominata call().

+0

Neat! Grazie. –

Problemi correlati