2011-06-23 11 views

cevap

11

Evet, ancak bağımsız değişkenler listeniz için kaşlı ayraçlar ({}) kullanamazsınız. Prosedürü bildirirsiniz, ör. Bu yol:

proc log [list message [list output $::output]] { 
    .... 
} 

Ama dikkat edin:
değişken prosedürü bildirildi anda değerlendirilir , çalıştırıldığı zaman değil zaman!

+2

+1: Bu tanım zamanlı varsayılan için mükemmeldir. Sağlanan argüman sayısını kontrol etmek için –

7

Yalnızca aradığınız anda değer olarak tanımlanmış bir varsayılan argüman istiyorsanız, daha zor olmanız gerekir. argümanlar listesini kontrol ederken

proc log {message {output ""}} { 
    if {[llength [info level 0]] < 3} { 
     set output $::output 
    } 
    ... 
} 

, ilkini Hatırla: tuşu geçerli yordam çağrısına argümanlar listesini almak için info level 0 kullanabilir ve sonra sadece o listenin uzunluğunu kontrol olmasıdır komutun adıdır.

+0

+1, vs sadece çıktı boş dizge olup olmadığını kontrol etmek için! Peki, yararlı bir cevap için +1 elde edersiniz, ama bu şekilde yaptığınız için çok sevindim :) – RHSeeger

+0

Mükemmel cevap, ancak bu şekilde 'log merhaba' komutunu veren bir kullanıcı arasında ayrım yapamayacağınıza dikkat edin. "'ve' selam 'yaz. Varsayılan çıktı dizesini ("" değiştirerek) değiştirebilirsiniz, ancak yeni değerle benzer bir sorunla karşılaşırsınız. Sık sık meydana gelmeyebilir ama ne zaman olursa olsun ... – Roalt

+0

@Roalt: Bu yorumu diğer cevap üzerine koymak mı istediniz? Benimkiyle, basitçe _counting_ tarafından gerçekten kaç değer verildiğini ayırt edebilirsiniz. Bu kadar kolay. –

1

bir başka yolu bunu yapmak için:

proc log {message {output ""}} { 
    if {$output eq ""} { 
     set output $::output 
    } 
} 
İlgili konular