全球FlexSim系统仿真中文论坛
标题:
声明正确类型变量的重要性
[打印本页]
作者:
zorsite
时间:
2018-7-3 16:12
标题:
声明正确类型变量的重要性
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
+ j/ j4 y( K5 |, Y8 D
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
I+ X9 i2 P9 m" L
Table LabelTable=current.labels["LabelTable"];
9 }% s: w$ R% N9 ]: N% p7 _
LabelTable[1][1]=5;
* p M: B Z# L( ^/ M4 v
" H$ I. z" Q* X! q v- r- P
如果直接对表格标签赋值会报错,比如以下语句:
* a2 s# K" r! J! M
current.labels["LabelTable"][2][1]=3;
, U6 I& Y; x. Y2 q1 |8 O
9 y$ V5 I3 v6 N: g
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
' F5 F" G" F4 b
Object Sink=model().last;
3 d3 k$ S# k0 L! [9 R7 M" e- h3 x
Sink.location.x=0;
2 w$ U, x# f3 M8 L( b, d# D
如果不声明直接引用则报错:
' ~( U& u- T9 A: ]. `2 D% P
model().last.location.y=0;
* u' w0 q- o& e. ^
+ R3 {5 a2 C0 ?* t, B2 O
/ Q6 x* m( B8 E
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
; Z3 B! y3 S. _: k' _
比如:
! ~9 A- e4 E1 g
treenode sink=model().last;
0 G" e) f" y5 z8 G9 B4 t) |
sink.location.x=0;
3 |" |; M- F8 q' {/ a* c1 s w% n
! Y' m3 n& v9 J1 `) T h
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
+ `% O- K$ {; e6 I/ h" l0 I* @ z9 t
[attach]4445[/attach]
- B" ^( y! U9 l- N
& x: ~- P3 n. X2 L
明明是使用了错误的属性,为什么会报Label错误呢?
. s; m0 F* g& [0 U. W
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
* L/ C2 U K. I2 o
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
* N! K: q2 {( A& {2 z" R8 u0 |
' c8 g/ Z+ w4 c! [5 {& f# m# i
) l, S) l: [& K! b
作者:
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.
3 }, b1 k+ }5 r1 T2 H7 a4 }
7 V( H. @+ Y1 [3 W4 I
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
* c0 @+ |: l) Q6 x) y. M: U
作者:
zorsite
时间:
2018-7-3 16:26
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
& e! n+ g3 U" a3 V( }& Q+ A5 g6 b( Q
Object继承自treenode,但是比treenode拥有更多的属性和方法。
$ b! ?. S/ V& P& G& E5 s
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
0 d; ], z9 r( ^: @2 G' N, g% r
作者:
zorsite
时间:
2018-7-3 16:38
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
4 _4 `9 N2 x/ n, X+ }
" M |2 C. q. p3 X
[attach]4446[/attach]
8 z t5 M8 r2 j
0 y0 i1 U9 k% x! l7 h
[attach]4448[/attach]
作者:
慧娴亚伦
时间:
2018-7-4 08:14
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法
% @' X- L% l6 L
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
' |- X+ E5 X# g' Q
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/)
Powered by Discuz! X3.3