全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
( t7 a0 t! I: n* E% f. @比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
$ J! n8 Y# f; D( k( ZTable LabelTable=current.labels["LabelTable"];# w% b, |! N7 ?5 V
LabelTable[1][1]=5;% u! s  @1 c' D6 Z
& ]+ H5 F/ Z# v" u6 Y* N
如果直接对表格标签赋值会报错,比如以下语句:
8 }# S$ U, @6 H; vcurrent.labels["LabelTable"][2][1]=3;4 c6 s$ [- }, p" b3 e) {& h) H% f1 E

5 R" |" E: |5 E1 g1 ]2 F再比如,将吸收器声明为Object类型的变量,则可以使用location属性:/ {: U% ~) t' V
Object Sink=model().last;
$ W0 j0 }- h  N+ D* \# USink.location.x=0;
, q% c7 E+ L1 _& O如果不声明直接引用则报错:" g" f, G1 u7 a
model().last.location.y=0;: c: H2 Y  n0 [- {. `; n  ^! g
4 g5 ~$ E/ Z; g7 |* K
' h6 D4 \3 n% E8 `
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
/ K8 d+ Q$ z& }比如:
7 P$ k! Y. ~0 q+ q& R( o; u% W6 J& ktreenode sink=model().last;' Z) B8 W% {3 X2 q2 @
sink.location.x=0;
& v$ i. z% h  u0 k7 K5 W$ P9 Y- {6 {- v; j- }1 Q! D
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:, ~5 M7 S' c7 v6 l' `
; w+ A' D6 H: D) B8 p4 X5 U

: j" D/ i: _: S) r/ t+ f3 d4 h! v, \明明是使用了错误的属性,为什么会报Label错误呢?+ {4 q9 V/ E0 @$ L1 q
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。, M( ]) v, y) h, h; ~- B
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
2 N( A! ~# A, Q  p) u2 a1 o
: e3 ?4 o( ^. W% C5 Y8 c  [( A5 w6 W! r4 H& N$ ^7 T$ J. w

本帖子中包含更多资源

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

x

评分

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

查看全部评分

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.3 y6 [* c" M, I* s! W& U7 E
9 |- T& a) M$ d( R' Q/ `
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。6 d- U% H7 U: b! o- v
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。3 q& t4 _: j# A- l2 P
Object继承自treenode,但是比treenode拥有更多的属性和方法。
7 j4 d' B8 m& P6 g未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
" Y5 _/ R/ L( k
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 8 d6 \& I# v8 Q( N2 o" u

7 p5 S( ^% i8 p: |7 W4 e) ~3 _+ w( [! h: }- X' L3 k$ ?2 p) z
1 C2 U3 p/ }; n0 B

本帖子中包含更多资源

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

x
5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法, H4 Q/ H- K* U+ W) S$ g0 c9 C! K+ U
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
2 {$ D# ]5 G8 T# ]: U& W$ y这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 14:17 , Processed in 0.078568 second(s), 16 queries .

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

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