Я пытаюсь создать несколько объектов, используя 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 network-topology.tcl
creating new router R1 / fwe2165 within JitixNet
creating new router R2 / dagsyu2 within JitixNet
creating new router R3 / fasdjg3 within JitixNet
bad option "get_name": should be one of...
router0 add_interface name network_id
router0 cget -option
router0 configure ?-option? ?value -option value...?
router0 get_interfaces
router0 get_mac{} return $mac;
router0 get_name{} return $name;
router0 get_topology
router0 isa className
while executing
"$router get_name"
(object "::t" method "::topology::show" body line 4)
invoked from within
"t show"
(file "network-topology.tcl" line 142)
Может кто-нибудь помочь, пожалуйста? Я в своем уме ... Честно говоря, я ожидал, что ITcl будет чем-то похожим на Java ...