全球FlexSim系统仿真中文论坛
标题:
声明正确类型变量的重要性
[打印本页]
作者:
zorsite
时间:
2018-7-3 16:12
标题:
声明正确类型变量的重要性
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
4 R0 U5 U& E: {5 x8 J
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
" b( p9 d& L% j. g/ H
Table LabelTable=current.labels["LabelTable"];
4 j f& g+ z* E, v7 @4 O
LabelTable[1][1]=5;
2 @# i% ~4 `+ |, v
& b' b- ^1 @" \7 p- ]
如果直接对表格标签赋值会报错,比如以下语句:
# H( M: T y0 W( n' g! c
current.labels["LabelTable"][2][1]=3;
/ J" M& l/ ^. l& r: H
, r9 x1 v# Q- k: c9 U% {* g. B
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
) w6 d7 |1 R! I- _2 t
Object Sink=model().last;
e+ m$ B1 h, h; e* |5 @
Sink.location.x=0;
; g; ?6 h7 ~8 c; c# W! H8 R/ |& x
如果不声明直接引用则报错:
- x% h9 y" ?9 c2 C, y% v
model().last.location.y=0;
3 T7 s8 P) I( c7 F1 `2 I3 s" d& K
1 q- S3 \( I% z6 T: \7 ?
+ X% L6 ?3 b5 k o# F
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
8 K9 x0 D7 ?+ Z8 N1 T2 Y: L# t
比如:
0 j" K) _8 g( k/ ~$ w7 g
treenode sink=model().last;
+ z8 `& a/ n3 y* ?/ Z
sink.location.x=0;
) y6 }0 @3 q9 P9 ]" r9 t
" u6 V8 h4 n$ \4 G7 P' U
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
8 m% D& j1 n2 y1 B
[attach]4445[/attach]
' s0 l! P& l' R) u8 A7 T
' U9 r$ R2 p1 q5 U: ]7 l
明明是使用了错误的属性,为什么会报Label错误呢?
" q& Y# a$ |$ e( N& A$ \7 U
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
! ~$ [; U. k+ s5 `0 a
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
: U) H! d* f3 Y- W8 m' Q+ H: W
5 s, I, B4 E! Y; X" b" w
+ z ?. L' i, w1 {& Z% `! b1 \0 X
作者:
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.
& ?' ]+ E* |) q4 D3 B1 x& e
) p/ B- e4 K: k+ v9 {% q/ L+ {" ~
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
$ M ?# u( b, P+ I; \% ?0 O' {- X
作者:
zorsite
时间:
2018-7-3 16:26
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
0 U( f% I- ^4 a. P9 v/ c3 N
Object继承自treenode,但是比treenode拥有更多的属性和方法。
7 ~$ O j' b5 _; d" W( P
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
, {" p4 u9 E! ?! M: m9 d M
作者:
zorsite
时间:
2018-7-3 16:38
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
3 K2 y7 b( t! \5 M9 v& X
! y7 \+ ?+ u6 v# v- T
[attach]4446[/attach]
1 K: z' V( _ a
. h) p! ^; W+ A6 Y9 p% l( V
[attach]4448[/attach]
作者:
慧娴亚伦
时间:
2018-7-4 08:14
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法
9 m" p2 _! H0 |: A
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
$ B0 D: T$ N: |$ j0 Z- m6 A
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/)
Powered by Discuz! X3.3