sadece argv
küresel gelen argümanları kopyalamak için harici komut dosyası için bir paketin komutları açığa basit yolu: çok kolay yapılır
package require foo
puts [foo::bar {*}$argv]
, ama belli ki sadece eserleri esas olarak sadece argümanlardan bir değer hesaplayan ve döndüren sadece işlevsel komutlardır. API daha karmaşıksa, birkaç komut gerçekleştiren daha uzun bir komut dosyası yazmanız gerekir (örneğin, bir dosyadan girdiyi okuyup, bir tanıtıcıyı komut almak için beslemek, durumu almak için diğer komutları kullanmak ve sonuçları). tutamacı, daha sonra her şeyi yazarak) ve/veya ek argümanlar sağlar (örneğin, çıktıyı varsayılan olarak stdout
'a yazması için komutu söyleme). Tüm paketler için çalışan genel bir yaklaşım yoktur.
Bu, Tcllib'deki cmdline paketinin ayrıştırma seçeneklerini daha kolay hale getirebileceğini söyledi. ile adlandırılabilir
proc printdata args {
array set param [::cmdline::getoptions args {
{page.arg 1 "current page"}
{pages.arg 1 "number of pages"}
} "printdata ?options? Data"]
if {1 != [llength $args]} {
return -code error "No data given"
}
set param(data) [lindex $args 0]
# processing here
parray param
}
:
% printdata -pages 2 -- "--Head data to print--"
param(data) = --Head data to print--
param(page) = 1
param(pages) = 2
ve yardım mesajı gösterir:
% printdata -?
printdata ?options? Data
-page value current page <1>
-pages value number of pages <1>
-help Print this message
-? Print this message
Örnek Kod: İşte o sayfadan en yararlı örnek
package require cmdline
package require foo
proc dostuff {args} {
array set param [::cmdline::getoptions args {
{...}
} "foobar ?options?"]
puts [foo::bar -grill $param(fnord) -blah [expr {$param(blub) * 12345}]]
}
dostuff {*}$argv
O size kalmış ne kadar karmaşık sen herhalde şeyler yapmak:Ben o zaman böyle bir şey yapacağını tahmin ediyorum.
Teşekkürler Donal. Bu, harici uygulamanın aynı sistemde çalıştığını ve TCL'de olduğunu varsayar. Daha açık olmalıydım. Özür! Harici uygulama farklı bir makinede ve TCL dışı olabilir. Ayrıca, 'foo :: bar {*} $ argv' ve 'dostuff {*} $ argv' öğelerini anlamama yardımcı olabilir misiniz? Anlamadım. – Sharad