2010-08-16 77 views
3

如何從proc返回到更高的上下文?
例如:如果proc X調用另一個稱爲第三個proc Z的進程Y,是否有一種方法可以從Z直接返回到X?TCL:返回更高一級?

回答

9

從8.5開始,是的。該return命令有一個-level選項其用於做到這一點:

return -level 2 $someValue 

因此,例如:

proc X {} { 
    puts "X - in" 
    Y 
    puts "X - out" 
} 
proc Y {} { 
    puts "Y - in" 
    Z 
    puts "Y - out" 
} 
proc Z {} { 
    puts "Z - in" 
    return -level 2 "some value" 
    puts "Z - out" 
} 
X 

產生以下輸出:

X - in 
Y - in 
Z - in 
X - out 

注意,這樣做減少了Z的可重用性,但這是你的業務。

+0

我一直使用'uplevel 1 [list return $ some_value]'來做到這一點,即使在老版本的tcl上也能正常工作。 – slebetman 2010-08-17 22:21:54

+0

@slebetman:你有沒有用上面這個簡單的線束檢查過?因爲當我這樣做時,它也會打印出「Y-out」,表明它沒有做你希望的事情...... – 2010-08-18 08:02:26

0

如果你是叫「X過程」,從「Z PROC」然後 循環將在你的流程創建..

+0

我其實我的意思是回到Y被稱爲X的地方,從那裏繼續該程序。 (Y將不會被一次又一次地呼叫) – thedp 2010-08-16 08:50:32

+0

我認爲下面的答案適合於你 – harlram 2010-08-16 08:55:54

+0

@heyram:你可能想考慮重寫你的答案以使用正確的單詞。使用「你是」這樣的短語將你答案的可信度降低了幾個數量級。 – 2010-08-16 13:43:43