==
運算符的行爲是固定的;它總是進行平等測試。事實上,它進行了一種平等測試,它傾向於做數字相等,如果沒有其他方式,只會退回到字符串相等。
因此,要改變check
的行爲,你必須得到真的棘手。
我想看看使用執行跟蹤攔截東西check
所以裏面,然後就可以把一個讀跟蹤在本地a
變量,這樣,當你讀它你會得到真正的價值是否匹配根據的東西到複雜的規則。 (b
可能只是爲布爾真值持有一個1
。)執行此操作的代碼足夠複雜,我想真的儘量避免這樣做!
如果可以,更容易的是重新定義proc
,以便您可以在check
正文上添加前綴,以便您可以在其中應用跟蹤。或者甚至按摩測試本身。
# Rename the command to something that nothing else knows about (tricky!)
rename proc my_real_proc
my_real_proc proc {name arguments body} {
# Replace a simple equality with a basic no-case pattern match
if {$name eq "check"} {
set body [string map {{$a == $b} {[string match -nocase $b $a]}} $body]
}
# Delegate to the original definition of [proc] for everything else
uplevel my_real_proc $name $arguments $body
}
只要你的check
定義之前運行的代碼,你會改變的代碼(沒有「更改代碼」),並得到你想要的那種能力。
它是遺留的代碼,不能更改/不允許更改 – user2043469 2013-03-15 14:40:03
好的,總結:你有任務需要改變'check',但你不能這樣做。這意味着您無法成功完成此任務。 – 2013-03-15 14:44:07
想到儘可能多 – user2043469 2013-03-15 14:50:37