Saya ingin membuat fungsi yang memiliki argumen opsional.
Dengan python saya akan melakukan sesuatu seperti ini:
def functionName(arg1,arg2=false,arg3=false):
if arg2:
#Do stuff with arguments
else:
#Do stuff without arguments
Saya sudah mencoba melakukan function FunctionName(arg1,arg2=false,arg3=false)
, tetapi itu hanya memberi saya kesalahan mengatakan argumen yang tidak valid.
Bagaimana saya melakukan ini dalam vimscript?
let a:arg=
lagi di vim. Anda harus menggunakan sesuatu sepertilet l:arg=
atau adillet arg=
. Lihat github.com/vim/vim/commit/…Pola ini akan memungkinkan Anda menetapkan nama yang bermakna untuk setiap argumen, dan memberikan nilai default untuk setiap argumen yang tidak disediakan:
Seperti yang ditunjukkan oleh Boris Brodski:
condition ? result_if_true : result_if_false
adalah ekspresi kondisional (ternary), yang mengevaluasi ke istilah kedua atau ketiga tergantung pada apakah istilah pertama itu benar atau tidak.Jadi jika tidak ada argumen ketiga yang diberikan,
baz
akan mengambil nilai default0
.Salah satu perhatian dengan contoh di atas adalah bahwa
a:foo
dapat hanya diakses dengana:
awalan, sementarabar
danbaz
dapat melakukannya tanpa prefiks. Karena ini tidak terlalu konsisten, Anda dapat memilih untuk menarik semua argumen ke dalam variabel lokal, seperti:(Secara teknis, Anda dapat menggunakan
l:
awalan untuk merujuk ke variabel lokal di dalam suatu fungsi, misalnyal:baz
, tetapi ini berlebihan sehingga saya tidak akan merekomendasikannya.)Tetapi saya merekomendasikan Anda untuk menggunakan formulir ini jika memungkinkan:
The
!
memungkinkan Anda untuk mendefinisikan kembali fungsi Anda saat runtime (misalnya dengan reload script), dans:
membatasi fungsi untuk lingkup naskah. Itu menghindari polusi namespace global (dan mempertaruhkan tabrakan) jika fungsi Anda hanya dirujuk dari tempat lain di dalam skrip. Ini umumnya merupakan cara yang lebih disukai untuk mendefinisikan fungsi ketika mereka tidak perlu terlihat secara global. ;-)sumber
a:0
tidak termasuk parameter bernama tetap.a:1
adalah parameter pertama dalam...
(Baru diuji dengan VIM 8.0)Saya tidak cukup berpengalaman dalam vimscript, tetapi ini adalah bagaimana saya akan melakukannya:
Anda kemudian dapat
call Func("Hello", "World")
, dan melihat bahwa ia mencetak "Halo", "Dunia", "baz tidak ditentukan".Ini menggunakan fitur varargs dari fungsi vim, yang memungkinkan Anda meneruskan sejumlah argumen tambahan sembarang ke fungsi. Argumen disimpan dalam variabel yang, tergantung pada
a:0
(panjang daftar argumen tambahan), baik diatur ke argumen yang sesuai atau nilai default.sumber
Karena Vim 8.1.1310 Vim juga mendukung argumen fungsi opsional nyata.
Namun, itu berarti bahwa sebagian besar instalasi vim belum mendukung ini. Neovim juga tidak menawarkan fitur itu juga.
Contoh dari
:help optional-function-argument
:sumber