2014-02-26 52 views
1

使用Tcl8.5,在調用方法內調用$this而不調用它嗎?例如:

package require Itcl 
namespace import itcl::* 

class MyCls { 
    method foo {} 
    method bar {} 
} 

body MyCls::bar {} { return "hi" } 

body MyCls::foo {} { 
    puts [$this bar] 
    # OR 
    puts [bar] 
} 
+0

這不是特定於tcl,但通常這是用來區分對象字段的簽名(參數)。例如。你有一個領域的「酒吧」,然後你有一個方法與參數欄也 - > this.bar =酒吧你可以定義你想要訪問的欄(本地或字段)。 –

回答

0

您只需添加一個bar的全局實現即可試用此功能。如下所示 - 沒有區別。該類只是在進入全局名稱空間之前添加另一個級別來檢查該過程。

% package require Itcl 
% namespace import itcl::* 
% class C {method foo {}; method bar {}} 
% body C::bar {} {return "C::bar"} 
% body C::foo {} { puts [$this bar]; puts [bar] } 
% C c 
c 
% c foo 
C::bar 
C::bar 
% 
+0

不明白「該類只是增加了......全局命名空間」。事實上,我可以嘗試一下,但也許我會錯過這個簡單的測試在功能上的一些區別...... – Dor

+0

@Dor當Tcl查找如何執行一個命令時,它在邏輯上沿命名空間的「路徑」查看如果命令存在那裏。默認情況下,首先在當前命名空間中查找,然後在全局命名空間中查找。 Itcl在這兩者之間插入類名稱空間(並且執行一些其他魔術來使方法顯示爲命令)。 Tcl 8.5允許你在路徑中插入你自己的附加組件。 –