2009-09-23 54 views
2

如果我有一個需要將數組返回給調用者的過程,那麼執行此操作的最佳方法是什麼?Tcl v8.4有一個proc返回數組的最佳方式是什麼?

我下面的代碼不使用Tcl因無法美元的數組變量工作:

proc mine {} { 
    array set foo { red 1 blue 2 green 3 } 
    $foo 
} 

tcl> set foo [mine] 
Error: can't read "foo": variable is array 

或者這不起作用或者:

proc mine {} { 
    array set foo { red 1 blue 2 green 3 } 
    array get foo 
} 

tcl> set foo [mine] 

tcl> puts $foo(blue) 
Error: can't read "foo(blue)": variable isn't array 

這給我留下了很可能效率低下:

proc mine {} { 
    array set foo { red 1 blue 2 green 3 } 
    array get foo 
} 

tcl> array set foo [mine] 
2 

或者模糊不清:

proc mine {varName} { 
    upvar $varName localVar 
    array set localVar { red 1 blue 2 green 3 } 
} 

tcl>unset foo 
tcl>mine foo 
tcl>puts $foo(blue) 
2 

有沒有更好的方法來做到這一點,或者如果沒有,最有效的方法是什麼?

回答

6

我想你已經回答了你自己的問題。簡而言之,你不能返回一個數組。有選擇,你在你的問題解釋說:

1)你可以返回數組值,並將其轉換回一個數組中的主叫 2),你可以在你的程序,使調用者傳遞使用upvar您可以修改的數組的名稱。

如果您使用tcl 8.5,您可能需要考慮切換爲使用字典。字典是可以傳遞的第一類對象,從程序返回等等。

3

我的選擇,如果你需要使用數組,是[數組的get/set]組合你表明:

proc mine {} { 
    array set foo { red 1 blue 2 green 3 } 
    array get foo 
} 

tcl> array set foo [mine] 
2 

話雖這麼說,如果你使用的Tcl 8.5或更高版本,可以考慮使用字典。他們通常會更快,更清潔。

相關問題