全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
$ {9 a/ v2 [  `" R( u2 |. i比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:6 h% w. N# M3 s; A% N5 d
Table LabelTable=current.labels["LabelTable"];
" E/ J! u: l$ s% P7 P- j, u5 f  iLabelTable[1][1]=5;
' K% \$ e# n' X: ?' P- s( E/ c" S) i7 r* z) K! L
如果直接对表格标签赋值会报错,比如以下语句:
: o, v; f1 ^2 P' R; U, @) ycurrent.labels["LabelTable"][2][1]=3;
* h# l' Z6 e. N# q2 `& D6 c3 j& G' J6 c. G" N3 W
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:& Y- h6 E. J, j# c' ]) ?! }
Object Sink=model().last;! R3 Y# d/ v/ e- \& R  w
Sink.location.x=0;
2 w) s4 B* k9 I7 z如果不声明直接引用则报错:
) M% G  a: v- t/ @- o8 x. Wmodel().last.location.y=0;
( _: ]# |1 q' k8 x; k
! q# m" a( ?  j' i0 l7 ?
6 R4 k7 p) K! v: l0 }如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
/ L5 o1 c/ b# x7 F比如:5 |0 {' `8 R$ m9 M
treenode sink=model().last;
/ e0 [4 F/ r, n( q. k0 esink.location.x=0;1 d& N# ^; F4 [: k# ~

8 t6 k6 t' i4 h6 j' B这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:9 ^3 R6 T8 T3 f

% x# n8 }; |+ P( e2 |! a0 g* z
3 [, [5 `8 x! O% n明明是使用了错误的属性,为什么会报Label错误呢?3 \5 q; k5 h& T) L8 ~* L
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
  ^" Z, P0 V1 J: b3 p0 t对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
8 O% h( ^. ]" A$ g: t+ n+ F
! ~" f% r( F2 ^( g: U. _$ n8 d* k1 H' P' e" T

本帖子中包含更多资源

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

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.
$ `% v8 v) S# _4 s
, z1 f. ]* G) G* ~! otreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。& ?; |) U% x- h" y8 {; U1 E* N9 Z
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
0 L6 p# U2 N4 }. ?Object继承自treenode,但是比treenode拥有更多的属性和方法。6 ?, O* v- v4 @' u, A3 H* V
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。# L9 h3 b" H+ f0 d, _5 |0 F
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
7 G% E8 P3 W" y# \4 C5 F# i- |  G3 }) i+ g9 ^

6 ]! P2 l+ o& m+ r$ {/ t4 }# D1 a/ Q
) G2 W  |& J" O$ N3 u1 ^3 g$ u! c

本帖子中包含更多资源

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

x
5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法9 K% D; i: ?  }' W7 x
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。/ C" \4 x+ Y- M% m' L8 h3 c
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-15 17:01 , Processed in 0.076825 second(s), 18 queries .

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

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