|
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。& ?* E% R% U" E# I
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
, Q( t5 q$ `) b) D7 G7 wTable LabelTable=current.labels["LabelTable"];
# q: @, {+ B% z& pLabelTable[1][1]=5;
6 j" a/ r& s9 I9 @9 p/ V1 l2 c) Q+ I" d4 U
如果直接对表格标签赋值会报错,比如以下语句:6 V3 m9 G2 G! n. ?9 {
current.labels["LabelTable"][2][1]=3;
' W5 Y1 M8 y- Y3 ?- U7 |4 m; Q+ E: y' y9 \* N0 y" U$ G
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
( \7 q2 b( X1 ]4 P N; [0 U0 h7 x9 Z+ RObject Sink=model().last;
3 W E0 v& ^ kSink.location.x=0;
u( e8 ^/ V' }$ m6 K, y( m p, V/ c如果不声明直接引用则报错:
" S6 i8 E: V/ w3 l7 m5 wmodel().last.location.y=0;; d' F# r( t# ~! ?" q" Y* z
N5 s( n5 c2 Q* n9 A6 A
: c2 a# l% |$ u+ B4 l如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。& e2 R+ v- s$ G! }0 g+ V
比如:
( b: y# Z: g9 y/ ?" j* c' ~" Ctreenode sink=model().last;
( n5 P! T, d( r5 W$ f7 W( @sink.location.x=0;
- Y0 f- {. R& w2 a8 T; f! n) G9 n4 H8 a
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
" n1 M* q! t+ P0 N: h
& v. z1 q* g7 L! B% L y% f9 P) }1 D) G3 S/ \8 x
明明是使用了错误的属性,为什么会报Label错误呢?6 A& }: H0 ^) ~5 t
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。' B+ f- f3 D6 `- v5 |
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。& G4 h- E! g2 x# j V* h9 C
( U, U% ~8 c( y, b9 y" e2 E
; N! O4 b5 b( L% M |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
评分
-
查看全部评分
|