全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。& ?* E% R% U" E# I
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
, Q( t5 q$ `) b) D7 G7 wTable LabelTable=current.labels["LabelTable"];
# q: @, {+ B% z& pLabelTable[1][1]=5;
6 j" a/ r& s9 I9 @9 p/ V1 l2 c) Q+ I" d4 U
如果直接对表格标签赋值会报错,比如以下语句:6 V3 m9 G2 G! n. ?9 {
current.labels["LabelTable"][2][1]=3;
' W5 Y1 M8 y- Y3 ?- U7 |4 m; Q+ E: y' y9 \* N0 y" U$ G
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
( \7 q2 b( X1 ]4 P  N; [0 U0 h7 x9 Z+ RObject Sink=model().last;
3 W  E0 v& ^  kSink.location.x=0;
  u( e8 ^/ V' }$ m6 K, y( m  p, V/ c如果不声明直接引用则报错:
" S6 i8 E: V/ w3 l7 m5 wmodel().last.location.y=0;; d' F# r( t# ~! ?" q" Y* z

  N5 s( n5 c2 Q* n9 A6 A
: c2 a# l% |$ u+ B4 l如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。& e2 R+ v- s$ G! }0 g+ V
比如:
( b: y# Z: g9 y/ ?" j* c' ~" Ctreenode sink=model().last;
( n5 P! T, d( r5 W$ f7 W( @sink.location.x=0;
- Y0 f- {. R& w2 a8 T; f! n) G9 n4 H8 a
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
" n1 M* q! t+ P0 N: h
& v. z1 q* g7 L! B% L  y% f9 P) }1 D) G3 S/ \8 x
明明是使用了错误的属性,为什么会报Label错误呢?6 A& }: H0 ^) ~5 t
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。' B+ f- f3 D6 `- v5 |
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。& G4 h- E! g2 x# j  V* h9 C
( U, U% ~8 c( y, b9 y" e2 E

; N! O4 b5 b( L% M

本帖子中包含更多资源

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

x

评分

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

查看全部评分

5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法+ h; V. O, F! t& O" Q- F
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。* _' b9 w: f: _1 ^0 \1 e7 E8 J
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 2 Q0 f# E& I4 h4 ?0 i' v2 {* E! r; \

2 L7 B- S! G6 p4 S, l
+ ?) x: J2 S4 T- M& C! a
" r! T: Y& ?9 c$ r7 T

本帖子中包含更多资源

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

x
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
- j9 ~8 `" O7 ~! w4 T+ h) z3 VObject继承自treenode,但是比treenode拥有更多的属性和方法。- q& i! _% M! H7 F
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
2 R4 J, R) }2 B
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.( D7 D( V- v3 Y) f& M

2 \; L# V; L. p- D/ ^, y  Otreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
- P" v8 B3 \: q7 p7 t
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-16 20:08 , Processed in 0.077311 second(s), 19 queries .

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

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