全球FlexSim系统仿真中文论坛
标题:
声明正确类型变量的重要性
[打印本页]
作者:
zorsite
时间:
2018-7-3 16:12
标题:
声明正确类型变量的重要性
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
/ H# H. r1 O9 K
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
/ I1 {' B/ K1 c+ F( n% a
Table LabelTable=current.labels["LabelTable"];
2 s; M: U8 X. R% T* \, [, D
LabelTable[1][1]=5;
* |3 L6 r! r* B6 h; ?
9 G0 f. g, a# [" j
如果直接对表格标签赋值会报错,比如以下语句:
" }7 } _5 Z* A. A Q7 x# b
current.labels["LabelTable"][2][1]=3;
$ {% T- A3 G3 Z% m% |
* G# v" l: }/ o
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
# `4 i9 E- \* s
Object Sink=model().last;
7 _" g4 |% e4 w8 t
Sink.location.x=0;
! U5 B' E1 |/ J4 T' H, w( R" z8 n
如果不声明直接引用则报错:
: d2 t. W/ }' X' R+ U6 p- \1 U
model().last.location.y=0;
1 z5 _- l* m- b2 S; |
: Y4 G9 ]4 m! g G
& h+ A2 {; E7 \' Z( d5 q
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
. O( V3 [+ N" r- T" d0 v: h* y
比如:
( {" O: O6 ]3 r
treenode sink=model().last;
6 W% `! d8 ^( I* i
sink.location.x=0;
/ w) z1 c* z/ N) @
" x! R$ i: Y, ^0 y
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
$ E( C5 ?# M5 R T+ e: B( E
[attach]4445[/attach]
% \ ]8 j& t0 G% `3 S4 Z& m
: v: a5 T8 b( D* P
明明是使用了错误的属性,为什么会报Label错误呢?
% B: F8 f3 E1 k7 O8 h
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
( v' [' k& J8 B- @
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
5 e4 n5 T8 i* S$ `3 i1 j
! E7 n, Q$ j) n" x3 ]+ J
! R, c; b1 W' l
作者:
zorsite
时间:
2018-7-3 16:17
Classes like the treenode, Object and Variant (to name a few) allow you to call methods, as well as access properties, variables, attributes and labels (if applicable) using dot syntax.
6 M2 o2 Y$ M- K1 O6 k7 }
. H7 y' u `2 L% z
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
- \4 L9 j" u- ?: P
作者:
zorsite
时间:
2018-7-3 16:26
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
" T$ \0 t) y+ @1 w# n1 A. @5 S
Object继承自treenode,但是比treenode拥有更多的属性和方法。
9 r) j6 }* j8 _% h5 _& \# Y" T
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
2 N- \1 D6 p) I0 `* ]
作者:
zorsite
时间:
2018-7-3 16:38
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
M2 k+ }3 A- p+ G& c& P/ p# K% _
/ {1 s( m; t1 L& ?0 b/ g
[attach]4446[/attach]
l& g/ Z) t% r( u# R7 H. h
3 i4 U* V8 A8 ?5 }
[attach]4448[/attach]
作者:
慧娴亚伦
时间:
2018-7-4 08:14
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法
9 M- m. m) S2 d1 s" A0 R, w
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
. i: d# ^6 l% |) K" m6 C0 _
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/)
Powered by Discuz! X3.3