我正在尝试使用 itcl 创建许多对象,然后将它们存储在数据结构中,以便以后可以调用它们的方法。但它给出了一个错误:
以下是我编写的代码:
itcl::class router {
variable name;
variable mac;
variable interface_list;
variable topology;
constructor {rname rmac rtopology} {
puts "creating new router $rname / $rmac within [$rtopology get_name]"
set name $rname;
set mac $rmac;
set topology $rtopology;
}
destructor {
delete $this;
}
method add_interface {name network_id} {
set int [interface #auto $name $network_id $this];
lappend interface_list $int;
}
method get_interfaces {} {
return $interface_list;
}
method get_name{} {
return $name;
}
method get_mac{} {
return $mac;
}
method get_topology {} {
return $topology;
}
}
itcl::class topology {
variable name;
variable router_list;
constructor {tname} {
set name $tname;
set router_list [dict create];
}
method add_router {name mac} {
set newrouter [router #auto $name $mac $this];
dict set router_list $name $newrouter;
}
method add_routerinterface {rname iname networkid} {
foreach r [dict keys $router_list] {
if {[$r get_name] == rname} {
$r add_interface $iname $networkid;
break;
}
}
}
method get_name {} {
return $name;
}
method get_routers {} {
return $router_list;
}
method show {} {
foreach rkey $router_list {
set router [dict get $router_list $rkey];
set rname [$router get_name];
}
}
}
topology t "JitixNet";
t add_router R1 fwe2165;
t add_router R2 dagsyu2;
t add_router R3 fasdjg3;
t show;
错误如下:
D:\Tcl\code>tclsh 网络拓扑.tcl 在 JitixNet 中创建新路由器 R1 / fwe2165 在 JitixNet 中创建新路由器 R2 / dagsyu2 在 JitixNet 中创建新路由器 R3 / fasdjg3 错误选项“get_name”:应该是...之一 router0 add_interface name network_id router0 cget -选项 router0 配置?-选项??value - 选项值...? router0 获取接口 router0 get_mac{} 返回 $mac; router0 get_name{} 返回 $name; router0 get_topology router0 isa 类名 在执行时 "$router get_name" (对象“::t”方法“::topology::show”正文第4行) 从内部调用 “t 显示” (文件“network-topology.tcl”第 142 行)
有人可以帮忙吗?我已经束手无策了...坦率地说,我希望 ITcl 类似于 Java...