全球FlexSim系统仿真中文论坛

搜索
查看: 2921|回复: 4

声明正确类型变量的重要性

[复制链接]
zorsite 发表于 2018-7-3 16:12:04 | 显示全部楼层 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。3 n9 g% Z6 K7 G% f
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
0 M( {" {# O: X( G6 G# uTable LabelTable=current.labels["LabelTable"];* c2 i7 z0 b: j7 a7 @
LabelTable[1][1]=5;
6 ?. p/ D0 F' T5 ?% U1 {2 z/ K! D5 Y4 i! _
如果直接对表格标签赋值会报错,比如以下语句:& M: a  z  i) F, A
current.labels["LabelTable"][2][1]=3;
7 Q0 K$ q2 `& c( V" G4 u( \) a5 I. G- L+ E) P8 _4 K' Z
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
' i. _% L- d% X4 f; EObject Sink=model().last;- Y/ I2 \( w# y# \! H% |
Sink.location.x=0;2 J) D  _4 q/ n0 f  m4 s
如果不声明直接引用则报错:
2 z2 S- F" m6 ?$ ^6 G: S% emodel().last.location.y=0;" L0 s- J) m9 d7 U6 U9 \4 b  P

) F8 A; o" F! s9 D
8 d. x0 Y& v3 W. V4 b5 U& y" K如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。1 r0 m% L* _8 ^# M! F
比如:
6 C* G; m; @5 T/ h! s# W& Ctreenode sink=model().last;: Z5 a. |" P5 ]5 t/ m3 b6 x
sink.location.x=0;
# X; R+ y. `; L4 M1 B8 g/ f
, k6 J/ x/ P, M/ Q' G$ G6 `* R# U: Q这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
  j. T! w8 t" [$ i( E8 V& d) ~2 z/ I3 R& C" Y0 @+ s5 z1 \

7 Z6 \) O3 }% }明明是使用了错误的属性,为什么会报Label错误呢?5 ~$ y) y+ E; A3 m$ j9 K
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
  k8 T& w( S% K7 d7 a' X% Y# Z对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
1 s+ I+ D/ ^! L0 O4 j5 F
- f" G, G4 g6 H( _+ W' m$ I5 ?
9 n+ l, _4 N& B8 |- z" i. S

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 3威望 +54 收起 理由
shadowwind + 24 赞一个!
慧娴亚伦 + 15 很给力!
SunshineFu + 15 很给力!

查看全部评分

 楼主| zorsite 发表于 2018-7-3 16:17:01 | 显示全部楼层
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.
2 M4 f$ _+ Y" [) l# F1 c" G/ d) I- ]
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
) h. _9 V$ X- s2 z  b- K
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 显示全部楼层
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。2 l& r7 ~1 i" [" Z* }- s2 `
Object继承自treenode,但是比treenode拥有更多的属性和方法。
' q1 X" U- u$ [% `# Z未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
5 @1 T: d- G! R* ]2 U
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 显示全部楼层
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 5 S! S7 K: F4 m6 _- D8 W+ \

6 z9 u. e$ e% e* M( I( i+ M) N
$ |! R) c4 }& Q  M- }5 J0 u! G' ?. z+ ]) b: `

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
慧娴亚伦 发表于 2018-7-4 08:14:06 | 显示全部楼层
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法
) {8 q7 z, i; y7 L" \& A但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
7 W3 l9 s+ Z7 l这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2024-3-29 02:47 , Processed in 0.082753 second(s), 19 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表