全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。0 a; @4 ^3 ]. q9 r7 d/ f
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:& O) P( k0 i3 m* p
Table LabelTable=current.labels["LabelTable"];; X; Y  t; W  S* D# y& _
LabelTable[1][1]=5;
! v1 M! q3 w( f0 R2 K% R# y$ |* ]/ E8 `+ E
如果直接对表格标签赋值会报错,比如以下语句:
. @- b4 o3 \1 T" T* S% Dcurrent.labels["LabelTable"][2][1]=3;
- `, o5 O4 t" @; m2 a2 \/ L5 o/ j8 z1 d' O! f, w: o& Q
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:6 x3 a- U+ M5 G4 }3 V0 A% x, E
Object Sink=model().last;# N" }- X5 ]7 w& u* q
Sink.location.x=0;
/ q: A' h! n$ v. C! q如果不声明直接引用则报错:# P' S1 F5 }% Z
model().last.location.y=0;) E) O5 q& J4 i5 B6 V1 @

; ?. M: d0 l! h
, L7 j! Z0 j# S1 x1 B5 v; g如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
- |8 X$ @( t7 c4 ]& u比如:8 S, A: a+ q7 i7 a
treenode sink=model().last;
, I1 ~6 M: p: R1 P. tsink.location.x=0;
4 |+ F, v+ r; {' R
- N6 d. s$ m2 H/ v9 `) c  R这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:* p; T9 f: B% B6 ?' W9 a7 x
: _6 t; ]5 M/ q3 e2 M6 x

- Y3 N7 M6 K& A" n' n% |8 E明明是使用了错误的属性,为什么会报Label错误呢?9 C; V3 r1 O8 v. A/ x1 H- y0 u
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。+ t. a( r+ l7 k2 [2 Z8 h. y$ M
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。) Y1 u' i; i- @9 f) f" d: C
$ m0 r2 O' q$ C2 @9 s& r9 ~0 ?1 z
& ~, D; E& Z* |" W7 c9 E1 d

本帖子中包含更多资源

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

x

评分

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

查看全部评分

5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法0 D9 _' S& V( A4 I( ^1 h% {& Y. [
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。7 J( r* Q0 U; N3 D# m/ l/ C
这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
, O0 @7 J3 F0 Y
+ y& E5 S9 m  x) ]! N0 g* j0 c# S( c# Q. v; F' K

- v+ P2 Q5 `2 M) B

本帖子中包含更多资源

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

x
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。4 ^( ?# r% k6 p' p3 C# q8 r
Object继承自treenode,但是比treenode拥有更多的属性和方法。& k. r- d- P) P- @# N! z6 i
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
+ D! q# c: S" M" z8 X6 L% h% R
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.' L& B; H6 L9 j/ K: j3 e7 ]
' d$ q4 Z' }. A' F  ]: @
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
5 S% u3 T- ~# j8 p. m
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 07:30 , Processed in 0.076124 second(s), 24 queries .

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

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