全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。8 c: S. f1 k( Y! l
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
) B, I0 R3 s4 X& }Table LabelTable=current.labels["LabelTable"];* q; J5 J+ L( @' K0 |, L. f
LabelTable[1][1]=5;
2 j" {4 \9 V) p& \  u
/ a. O7 a1 F7 s: ]如果直接对表格标签赋值会报错,比如以下语句:6 L' P: w! @% ^$ t4 g
current.labels["LabelTable"][2][1]=3;: O( }. B2 @* z" ^3 S
3 B$ ]3 x5 G# J: T9 ?
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
! m9 t8 {" j% F8 rObject Sink=model().last;
, ^1 f! l/ w5 |; R) RSink.location.x=0;4 l. I, e+ e0 D/ i* q2 @: x5 \3 m! M' _
如果不声明直接引用则报错:3 L! S5 Y5 u! l1 e( j6 A
model().last.location.y=0;
) _% j+ L% e9 X" y# S1 P7 T+ k' a/ y, m; z

+ w: T) g. G* h2 L* X# `2 J如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
' t2 V9 Z$ ]. U+ E/ f6 s' ~" x比如:
& h; h8 O# \$ Otreenode sink=model().last;  {9 h- a) c; q7 w+ E
sink.location.x=0;, k0 D( q' z* y/ V+ l4 ], Y5 `
! L. q  p7 f5 N; z* ?/ V7 u
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
5 p6 O' C  B  X/ [# Y. N, A( E. w$ f6 X: N! g, Z
1 t/ U+ k' K% Z- Z/ X$ I7 k$ p
明明是使用了错误的属性,为什么会报Label错误呢?
" t" V( K) `( G: J' e  FFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
! p% T0 s, x! {$ Z# m1 e0 W对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。8 |5 M. n" n" e2 h" {5 w

& q1 g" _& M. A8 s
9 s. x- |! V2 w3 F3 g8 m$ Y

本帖子中包含更多资源

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

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.
2 R, N  l! E2 k& _* A9 @- c
  N1 z- @# b+ `, d1 u4 jtreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。$ e6 g6 @2 O2 `3 q9 X( q7 f
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
3 z7 Y8 X. X4 P5 Z$ ^% _% l, FObject继承自treenode,但是比treenode拥有更多的属性和方法。4 r  k" W6 J* T) y, s! Y! M5 H
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。! c% {  @! I9 f: Q* C
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
5 j! a: c' t" \3 F
. x  O( `8 C* T" O3 q- ~- [2 i2 M3 D: V5 [% i1 I
* _2 ?$ Q( R2 B

本帖子中包含更多资源

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

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

本版积分规则

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

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

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

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