全球FlexSim系统仿真中文论坛

搜索
查看: 5120|回复: 4
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
3 ?# O2 G6 d* f5 H0 T比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:% G$ F: |, N. {9 N5 J
Table LabelTable=current.labels["LabelTable"];
4 P1 m; {  ?/ L# W. R0 W0 j- rLabelTable[1][1]=5;& `+ c  F/ q/ n6 E7 J

4 f$ W0 h1 o- x5 D1 z如果直接对表格标签赋值会报错,比如以下语句:+ X4 j. A+ V& ~7 g
current.labels["LabelTable"][2][1]=3;
& Y" K1 n8 ^0 s# K6 l$ M
: C1 D/ v+ x# z! E4 Z# g; A: M& q再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
1 A# L& `- a9 ZObject Sink=model().last;
: O+ }5 \' Z4 mSink.location.x=0;! Z, w5 c. K/ O! ?
如果不声明直接引用则报错:
5 L* ~8 a3 L0 kmodel().last.location.y=0;( c8 q$ x- N" T8 \, I

6 _, H: B  c+ r  a2 b$ H6 r- `. c% |3 m9 u0 j8 |$ @2 M
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
4 F. l) o+ V2 ~# d  m- I比如:0 g; ~. J3 A- ~( Y; ~. O5 v
treenode sink=model().last;% ?* [6 ~/ K, H- V
sink.location.x=0;
% |3 c" I4 k( i7 ^
/ O4 \& p' }: I! e) B) k这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:7 R% l* h* v8 T1 l( }

) Z5 a7 K) H: n! j4 e% k" l0 s% ^  f4 C
明明是使用了错误的属性,为什么会报Label错误呢?- N, r7 N4 ]& f: p4 h) `5 |" R) R
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。. b- q1 e7 v  k8 D* Q# s4 k
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。  {- p% l# `& G2 D# `8 O" F

( G$ I5 K+ H( X' |
' k/ f& i' y/ k+ }* B; A

本帖子中包含更多资源

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

x

评分

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

查看全部评分

5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法9 \. O- n8 \( s, l
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。* t; C& V6 v, E% ~7 _8 I  x
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 0 w9 G" P* ]4 r$ s, `3 f

* Q# z2 D( t' c: P/ t( ~& M3 H% u+ X9 t+ {/ U* Y
3 n7 V; J3 V! C2 S

本帖子中包含更多资源

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

x
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。1 R# Q! H! x% ]: s5 X
Object继承自treenode,但是比treenode拥有更多的属性和方法。
3 \- T( V9 w! ?6 ^, E未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。% l4 W& W% e% j$ ]  d
2#
 楼主| 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.* i7 |3 |  ?& \
2 Q4 ^0 r& i3 D' \. x# P9 }1 u
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。) D, ?0 G+ u( ?4 Z2 u- W
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-6 08:09 , Processed in 0.063786 second(s), 16 queries .

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

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