2012-02-14 38 views

cevap

15

Gerçekten ne anlama geliyorsunuz.

Tek yön

source /the/path/to/the/first.tcl 
source /the/path/to/the/second.tcl 

başka bir yöntem de ilk senaryonun altına Yukarıdaki örnekten source ikinci çağrıyı eklemektir yapacağını üçüncü ("ana") senaryo yazmaya etmektir. İlk yaklaşıma

Değişiklik: komut source için ana komut, bir deyimsel yolu ile aynı dizinde bulunan yürütülecek eğer onları kaynak olursa olsun ne çalışacaktır

set where [file dirname [info script]] 
source [file join $where first.tcl] 
source [file join $where second.tcl] 

Bu yoludur Geçerli işlem dizini ve proje dizininin bulunduğu yer.

3

Sadece ikinci komut dosyasını çalıştırmak için kaynak kullanmanız gerekiyor.

source "/tmp/whatever.tcl" 
1

soru precicely tcl içinden tcl kod çalıştırmanın hedefi başarabilmek için yollar ton vardır formüle değildi nedeniyle bu, genellikle doğru cevap iken. Bu konuya ayrıntılı olarak girmemeliydim, çünkü kodun uygulanmasının anlaşılması, tcl itselve'nin anlaşılmasında önemli bir noktadır.

kaynak komut klasik bir şekilde komut dosyalarını yürütme ile karıştırmak edilmemelidir kaynak

yok, ben iplik marş istedi ne düşündüğünü. Kaynak komut, c/perl/php. java veya python gibi diller sadece "ithalat" mekanizmalarına sahiptir.

Buradaki fark, bu dillerin karşılık gelen kaynak/binary/baytkod dosyalarına bağlı olan, kullanılabilir paketlerin bir iç veritabanı oluşturmasıdır. Bir içe aktarma deyimi yazarak, bağlı kaynak veya bayt kodu veya ikili dosyalar yüklenir. Bu, ek kod yazmadan daha kapsamlı bir bağımlılık yönetimi sağlar. Tcl'de bu ad alanlarına sahip olunabilir ve paket için komut gerektirebilir. Örnek:

bu source.tcl olduğunu varsayalım: diyorsunuz gibi

proc foo {bar} {puts "baz"} 
set BAM "BOO" 

Şimdi, "ana" senaryosu var. Ben buna "ana" derim. Bu içeriğe sahiptir:

set BAM {my important data} 
source source.tcl 
#also the function foo can now be used, becouse source reads the whole script 
foo {wuz} 
set BAM 
#will output "BOO" 

exec komutu

Elinden yepyeni tercüman örneğini başlayan ek yükü ile canlı da yapın:

set BAM {my important data} 
exec tclsh source.tcl 
#The variable BAM will not be modified. You can not use the function foo. 

eval komutu

Eval, programlanmış bir kod gibi bir dizeyi veya bir listeyi (tcl'de her şey bir dizedir) değerlendirebilir. Tam kaynak dosyayı bir dizeye yüklemeniz gerekir. Ve sonra, ana kaynak dosyanızda bir şeylerin üzerine yazmamak için, kodu ayrı bir kapsam dahilinde değerlendirmek için eval'ı kullanın.

set fp [open "somefile" r] 
set code_string [read $fp] 
close $fp 
eval $code_string 
İlgili konular