我刚刚开始使用itcl,并且找到了How to pass itcl object from one class to another?但这并没有帮助我。itcl如何将对象传递给其他对象
我有以下对象定义:
package require Itcl
namespace eval FEM {
itcl::class Node {
variable nid
variable x
variable y
variable z
constructor {{NID 0} {coordX 0} {coordY 0} {coordZ 0}} {
set nid $NID
set x $coordX
set y $coordY
set z $coordZ
return $this}
method is {nid coordX coordY coordZ}
method printString
}
itcl::body Node::is {NID coordX coordY coordZ} {
set nid $NID
set x $coordX
set y $coordY
set z $coordZ}
itcl::body Node::printString {} {
return "$nid $x $y $z"}
# #######################################################
itcl::class CQUAD {
variable eid
variable pid
variable node1
variable node2
variable node3
variable node4
constructor {{EID 0} {PID 0} {NODE1 0} {NODE2 0} {NODE3 0} {NODE4 0}} {
set eid $EID
set pid $PID
set node1 $NODE1
set node2 $NODE2
set node3 $NODE3
set node4 $NODE4
return $this}
method is {EID PID NODE1 NODE2 NODE3 NODE4}
method printString
}
itcl::body CQUAD::is { EID PID NODE1 NODE2 NODE3 NODE4 } {
set eid $EID
set pid $PID
set node1 $NODE1
set node2 $NODE2
set node3 $NODE3
set node4 $NODE4}
itcl::body CQUAD::printString {} {
return "$eid $pid $node1 $node2 $node3 $node4"}
}
}
# ########################################################
# Test
for {set n 1} {$n <= 4} {incr n} {
set coord1 [expr {$n+1} ]
set coord2 [expr {$n+2} ]
set coord3 [expr {$n+3} ]
set NID N$n
::FEM::Node $NID $n $coord1 $coord2 $coord3
puts "[$NID printString]"
}
set PID 99
set EID 88
以下是错误的,因为$N1
根本N1
,而不是一个“节点” N1
::FEM::CQUAD MyQuad $EID $PID $N1 $N2 $N3 $N4
但是我怎么传递类型的对象节点到CQUAD类型的对象? 我也试过:
::FEM::CQUAD MyQuad $EID $PID $::FEM:Node::N1 $::FEM:Node::N2 $::FEM:Node::N3 $::FEM:Node::N4
另外,如何删除一个对象? unset $N1
是错误unset $::FEM::Node::N1
也是假
最后一个问题:假设我有与它Node类型的对象CQUAD对象: 我怎么能获得例如节点2的y坐标CQUAD 1的?
使用N1我得到的命名空间::: N1所以itcl :: delete节点$ :: N1应该删除它,但我得到:糟糕的选项节点,应该是....只是对我来说:N1是对象名称,“节点”是对象类型? – Lumpi
要删除,'object'是一个文字字符串。所以你的情况是:itcl :: delete object :: N1 –