2013-08-15 36 views
9

Có cách nào để gọi hàm vim với danh sách đối số hay không. Danh sách các đối số của tôi đến từ một đối số splat tùy chọn trong một hàm khác và tôi cần một cách để chuyển các đối số này tới hàm đích.Gọi hàm có danh sách hoặc đối số splat

Chức năng mục tiêu là,

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

Các chức năng đó sẽ gọi run_hello là,

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

Nó sẽ được gọi như vậy, với lập luận khác nhau.

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

Tôi hiện đang sử dụng hello(arglist) và đi qua các danh sách a:000 về phía trước. Nhưng tôi muốn biết nếu nó có thể gọi một chức năng với một danh sách như là đối số, mà sau đó trở thành danh sách đối số thường xuyên của nó.

Cái gì đó như của JavaScript,

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

Cảm ơn.

Trả lời

14

Tương đương apply() Javascript là call() trong Vimscript:

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

Đây không phải là lỗi đánh máy: Bạn :call các hàm có tên call().

+0

Gọn gàng! Cảm ơn bạn. –

Các vấn đề liên quan