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 ##
end
arg_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 ##
end
arg_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 ##
end
Bu 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.