全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
: }% u! @* t0 E1 I比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
( u) g, V4 `( y; U# yTable LabelTable=current.labels["LabelTable"];
& o( q! P7 C/ |8 V. D7 VLabelTable[1][1]=5;9 f2 U3 E0 t% C3 `( W& Y! p

6 w, y0 \( I1 T/ g  n如果直接对表格标签赋值会报错,比如以下语句:
8 @. _" \& z6 W0 Scurrent.labels["LabelTable"][2][1]=3;2 B+ I- Q* ?5 q- m7 I" ?, E, a
1 l5 m2 U: m) u% }& n1 V/ c: ~- M
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:; d) I; P5 G4 X1 z# V
Object Sink=model().last;5 _3 ]5 a5 c) C) m
Sink.location.x=0;
' p. b: A8 T7 G1 t如果不声明直接引用则报错:
8 L. X  g5 Z4 d7 A, v& ?model().last.location.y=0;
' [6 x& V3 G3 W: J* ^1 D+ G1 v- {2 E7 v- L7 N3 Y/ C7 G
  L" {+ h& m, o- ?, q7 ~0 v
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
3 H& a5 I$ s9 L! s; R比如:4 Z2 I- Y% |1 U( w% ~/ f: @
treenode sink=model().last;
6 ~/ N( m8 |$ c# q+ q: W4 [sink.location.x=0;3 Y4 M3 L3 W: ]( x3 H6 v4 G2 l& G& i

) A; n1 |* V# I4 T; G9 ~: z这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
, R3 J/ W$ m# r% k8 Q, Q7 C4 \1 O& O; S4 D

8 n# D/ a# R4 I明明是使用了错误的属性,为什么会报Label错误呢?
: o( ^. x3 W$ QFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
' v0 z9 X( t4 B对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
0 p4 Z4 b; d. o& h7 M  k5 _/ e4 j' G% J& n5 x

9 ]9 Q+ t& z' K, G) v0 b

本帖子中包含更多资源

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

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.
8 {3 W' p2 I# W% A' S" r' ^* T
: `# M# ?1 c3 q% R$ D6 Ktreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
8 Q/ w+ V$ s% u
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
6 C! B7 g& c3 P( }' B1 SObject继承自treenode,但是比treenode拥有更多的属性和方法。
* y( k2 H1 l) i  ~; Q未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
- z* f' w, a: g6 K" u& E
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
2 R6 p% T1 C% u5 p* p" x; K3 v5 Y4 ]2 e: z* m$ c

( |+ f5 Z4 ^3 C' `( _$ I) a( p* X* ^7 b' T- @0 y( u8 R: j

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-9-6 08:08 , Processed in 0.064079 second(s), 15 queries .

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

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