全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
9 ?# E6 L1 b  G9 o2 }$ B9 }8 I比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:+ d+ S9 E5 P: N1 ~9 w' Y3 W
Table LabelTable=current.labels["LabelTable"];" S# E1 W6 Y" d' q$ o/ e3 G, q
LabelTable[1][1]=5;! ~+ n  [0 H* J, ]6 a( B% C

2 v- c8 f0 C% d5 X如果直接对表格标签赋值会报错,比如以下语句:: ]" q9 p+ S% `' h" c
current.labels["LabelTable"][2][1]=3;
8 a7 }# V+ ]& d5 r, G' e8 P. f3 V; B+ X" W4 B
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
# L9 G% w3 G6 @. F0 x  p: r5 sObject Sink=model().last;
, D3 h# ~7 ^$ G6 G) kSink.location.x=0;
& t7 @) a' ?+ O4 _+ @如果不声明直接引用则报错:! Z4 y( i& r% i$ E7 f0 S
model().last.location.y=0;
; U& i0 b$ Q9 w- C1 g* X2 i  Y0 g! p) B) E/ S; s) h
; |. [: ~3 z9 m1 T3 t- Q% s/ f
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。1 Y% k. y, g/ {2 ^" z" D
比如:( n$ z9 A' h+ m4 E$ M" q
treenode sink=model().last;) [- B. H4 Z+ o0 z
sink.location.x=0;
1 C6 d. ~# _6 z2 ^$ u" n* R2 M' ^* V& s2 a0 z+ ~+ ?
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
! X& \( x  E6 W1 ?
, e1 g; k* n2 ~3 Q1 ~& J4 a0 m( E# s: ^+ _) y/ d9 t3 p* }
明明是使用了错误的属性,为什么会报Label错误呢?
$ C4 a; h: Z" ~- g6 eFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。: s3 E1 T3 n, L4 Z8 ^) @
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。: v2 P4 x$ u7 f
, q& i% J6 O5 m) _- Z5 g! N
  O- O- z; `7 ~" x1 K+ T+ R

本帖子中包含更多资源

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

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.
! n- K9 U3 J  W$ ~& O% |
1 U( d6 N7 ?- T5 Q# A1 o$ {treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。9 F- p  i; l5 C( T& ~
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。4 g+ f9 a. \/ f5 ~, I7 n
Object继承自treenode,但是比treenode拥有更多的属性和方法。" A; ]  w  x% `
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。: `6 ^/ s6 j2 w* D* I% p
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 7 w! ~4 O# i2 Q! X2 B4 y

/ F" W* m6 L, H8 L; X, E
8 c  K: q; i1 B4 ]4 G
$ R* d5 F- ?. A6 E* g

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-7-6 20:05 , Processed in 0.074456 second(s), 15 queries .

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

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