ArgTools

Argument Handling

ArgTools.ArgReadType
ArgRead = 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.

source
ArgTools.ArgWriteType
ArgWrite = 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.

source
ArgTools.arg_readFunction
arg_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 yolu
  • AbstractCmd: standart çıktısından okunan bir komut
  • IO: 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.

source
ArgTools.arg_writeFunction
arg_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 yolu
  • AbstractCmd: standart girdi olarak yazma işlemi yapılacak bir komut
  • IO: 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.

source
ArgTools.arg_isdirFunction
arg_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.

source
ArgTools.arg_mkdirFunction
arg_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.

source

Function Testing

ArgTools.arg_readersFunction
arg_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.

source
ArgTools.arg_writersFunction
arg_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.

source
ArgTools.@arg_testMacro
@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.

source