ArgTools
Argument Handling
ArgTools.ArgRead — TypeArgRead = Union{AbstractString, AbstractCmd, IO}ArgRead türleri, arg_read fonksiyonunun okunabilir IO handle'lara dönüştürmeyi bildiği türlerin bir birleşimidir. Ayrıntılar için arg_read bakın.
ArgTools.ArgWrite — TypeArgWrite = Union{AbstractString, AbstractCmd, IO}ArgWrite türleri, arg_write fonksiyonunun yazılabilir IO handle'larına dönüştürebildiği türlerin birleşimidir, arg_write'in geçici bir dosya oluşturarak işlediği Nothing hariç. Ayrıntılar için arg_write kısmına bakın.
ArgTools.arg_read — Functionarg_read(f::Function, arg::ArgRead) -> f(arg_io)arg_read fonksiyonu, aşağıdakilerden herhangi biri olabilen bir arg argümanını kabul eder:
AbstractString: okunmak üzere açılacak bir dosya yoluAbstractCmd: standart çıktısından okunan bir komutIO: okunacak açık bir IO tanıtıcısı
Gövde normal bir şekilde dönerse veya bir hata fırlatırsa, açılan bir yol arg_read'den dönerken kapatılacak ve bir IO tanıtıcısı arg_read'den dönerken boşaltılacak ancak kapatılmayacaktır.
Not: Bir dosya açıldığında, ArgTools open(...) çağrısına lock = false geçecektir. Bu nedenle, bu fonksiyondan dönen nesne birden fazla iş parçacığı tarafından kullanılmamalıdır. Bu kısıtlama gelecekte gevşetilebilir, bu da çalışan herhangi bir kodu bozmayacaktır.
ArgTools.arg_write — Functionarg_write(f::Function, arg::ArgWrite) -> arg
arg_write(f::Function, arg::Nothing) -> tempname()arg_read fonksiyonu, aşağıdakilerden herhangi biri olabilen bir arg argümanını kabul eder:
AbstractString: yazma için açılacak bir dosya yoluAbstractCmd: standart girdi olarak yazma işlemi yapılacak bir komutIO: yazma işlemi yapılacak açık bir IO tanıtıcısıNothing: yazma işlemi için geçici bir yol açılmalıdır
Eğer gövde normal bir şekilde dönerse, açılan bir yol tamamlandığında kapatılacaktır; bir IO tanıtıcısı argümanı açık bırakılır ancak dönüşten önce boşaltılır. Eğer argüman nothing ise, yazma işlemi için geçici bir yol açılır ve tamamlandığında kapatılır ve yol arg_write fonksiyonundan döner. Diğer tüm durumlarda, arg kendisi döner. Bu, bir argüman geçilip geçilmediğine bakılmaksızın yazılan her şeyi tutarlı bir şekilde döndürebilmeniz için yararlı bir modeldir.
Eğer gövdenin değerlendirilmesi sırasında bir hata olursa, arg_write tarafından yazma işlemi için açılan bir yol silinecektir; bu, bir dize olarak geçilmiş olsun ya da arg nothing olduğunda üretilen geçici bir yol olsun.
Not: Bir dosya açarken, ArgTools open(...) çağrısına lock = false parametresini geçecektir. Bu nedenle, bu fonksiyondan dönen nesne birden fazla iş parçacığı tarafından kullanılmamalıdır. Bu kısıtlama gelecekte gevşetilebilir, bu da çalışan herhangi bir kodu bozmaz.
ArgTools.arg_isdir — Functionarg_isdir(f::Function, arg::AbstractString) -> f(arg)arg_isdir fonksiyonu, arg'ın mevcut bir dizinin yolu olması gerektiğini (aksi takdirde bir hata oluşur) alır ve bu yolu f'ye geçirerek nihayetinde f(arg) sonucunu döndürür. Bu, kesinlikle ArgTools tarafından sunulan en az kullanışlı araçtır ve çoğunlukla arg_mkdir ile simetri sağlamak ve tutarlı hata mesajları vermek için var olmuştur.
ArgTools.arg_mkdir — Functionarg_mkdir(f::Function, arg::AbstractString) -> arg
arg_mkdir(f::Function, arg::Nothing) -> mktempdir()arg_mkdir fonksiyonu, arg'ın aşağıdakilerden biri olması gerektiğini belirtir:
- zaten mevcut olan boş bir dizinin yolu,
- bir dizin olarak oluşturulabilecek mevcut olmayan bir yol, veya
nothing, bu durumda geçici bir dizin oluşturulur.
Tüm durumlarda dizinin yolu döndürülür. Eğer f(arg) sırasında bir hata oluşursa, dizin orijinal durumuna döndürülür: eğer zaten mevcutsa ama boşsa, boşaltılacak; eğer mevcut değilse silinecektir.
Function Testing
ArgTools.arg_readers — Functionarg_readers(arg :: AbstractString, [ type = ArgRead ]) do arg::Function
## ön test kurulumu ##
@arg_test arg begin
arg :: ArgRead
## `arg` kullanarak test ##
end
## test sonrası temizlik ##
endarg_readers fonksiyonu okunacak bir yol ve bir tek-argümanlı do bloğu alır; bu blok, arg_read'in işleyebileceği her test okuyucu türü için bir kez çağrılır. İsteğe bağlı type argümanı verilirse, do bloğu yalnızca o türde argüman üreten okuyucular için çağrılır.
Do bloğuna geçirilen arg, argüman değerinin kendisi değildir, çünkü bazı test argüman türlerinin her test durumu için başlatılması ve sonlandırılması gerekir. Açık bir dosya tanıtıcısı argümanını düşünün: bir testi kullandıktan sonra, onu tekrar kullanamazsınız; bir sonraki test için dosyayı kapatıp tekrar açmanız gerekir. Bu arg fonksiyonu, @arg_test arg begin ... end kullanılarak bir ArgRead örneğine dönüştürülebilir.
ArgTools.arg_writers — Functionarg_writers([ type = ArgWrite ]) do path::String, arg::Function
## ön test kurulumu ##
@arg_test arg begin
arg :: ArgWrite
## `arg` kullanarak test ##
end
## test sonrası temizlik ##
endarg_writers fonksiyonu, arg_write'ın işleyebileceği her test yazıcı türü için bir kez çağrılan bir do bloğu alır; geçici (var olmayan) bir path ve path'e yazılabilen çeşitli argüman türlerine dönüştürülebilen arg ile birlikte. İsteğe bağlı type argümanı verilirse, do bloğu yalnızca o türde argüman üreten yazıcılar için çağrılır.
Do bloğuna geçirilen arg, argüman değerinin kendisi değildir, çünkü bazı test argüman türlerinin her test durumu için başlatılması ve sonlandırılması gerekir. Açık bir dosya tanıtıcısı argümanını düşünün: bir testi kullandıktan sonra, onu tekrar kullanamazsınız; kapatmanız ve bir sonraki test için dosyayı tekrar açmanız gerekir. Bu arg fonksiyonu, @arg_test arg begin ... end kullanılarak bir ArgWrite örneğine dönüştürülebilir.
Ayrıca, arg_readers gibi bir yol adı alan bir arg_writers yöntemi de vardır:
arg_writers(path::AbstractString, [ type = ArgWrite ]) do arg::Function
## ön test kurulumu ##
@arg_test arg begin
# burada `arg :: ArgWrite`
## `arg` kullanarak test ##
end
## test sonrası temizlik ##
endBu yöntem, tempname() tarafından üretilen yol adını kullanmak yerine path'i belirtmeniz gerektiğinde kullanışlıdır. path, arg_writers'ın dışından geçirildiği için, bu biçimde do bloğuna bir argüman değildir.
ArgTools.@arg_test — Macro@arg_test arg1 arg2 ... body@arg_test makrosu, arg_readers ve arg_writers tarafından sağlanan arg fonksiyonlarını gerçek argüman değerlerine dönüştürmek için kullanılır. @arg_test arg body yazdığınızda, bu arg(arg -> body) ile eşdeğerdir.