全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
  H, \; Z% f! v1 V3 {比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:  e! t3 J! C8 ^7 F3 P5 ^1 A
Table LabelTable=current.labels["LabelTable"];; X) ?  `6 W; @& }- C# ]: x
LabelTable[1][1]=5;
2 P# @, F0 }$ s$ }7 k0 N- r$ F( e
如果直接对表格标签赋值会报错,比如以下语句:) ?6 y2 k9 \  A. ]" I* Z
current.labels["LabelTable"][2][1]=3;
. C$ A! k3 j# ^8 ~; W7 \; j$ x; w
4 }# F8 _* Q: @5 Q( X! T再比如,将吸收器声明为Object类型的变量,则可以使用location属性:: z3 ?; A5 }  |& b/ t" `& A9 |
Object Sink=model().last;
+ o3 }$ d% n; ^, mSink.location.x=0;
+ R  l& I/ _: L+ e' [如果不声明直接引用则报错:
- U2 G3 Y% g2 Hmodel().last.location.y=0;$ |1 X* a# B* u3 \) z, Q
/ y* w+ q' t! ^0 N
) `% s, A# M0 w1 j
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。* s! V/ b5 Z! ^8 D. Z
比如:
+ [) V/ z8 W% ]treenode sink=model().last;
3 h; f* \4 b- S% m3 s# m0 A3 i8 Isink.location.x=0;
  ~' {. M  v9 `1 Z0 c. B
. g2 G' [% y% ^* B9 B4 J4 H这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:( K/ j. E3 b$ C2 p2 D( k
: O4 B$ V6 E- n' D) J; c

# ?5 C3 G( X! D+ h7 p( [& G明明是使用了错误的属性,为什么会报Label错误呢?
# y* \! k' ^, Y2 Q+ ?7 J, J) XFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。( x+ E; E( `: j- u4 }! |# V
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
. ^1 O  _6 t# z' H4 b. l. j3 Q# I, o* z' {' l0 O( L) D

0 f. t( s  K1 e& |

本帖子中包含更多资源

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

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 u- y7 ~4 y4 A& N7 ^* p
3 s- z. B$ j( X$ S$ F
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。! ?# J& a* j9 w; ?* A$ V6 K
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
  y, _/ D+ ^& |" w6 g6 \# rObject继承自treenode,但是比treenode拥有更多的属性和方法。, s# Y* b: x2 R, M: z; |, q
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。1 d9 K  j5 F2 p5 v; G* C, z" d
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 , P+ i8 i( S+ c( s
% C: h- c* r9 n

* \. K/ |- T: M  B$ d4 k1 E% ~+ H7 K" C+ q9 j6 r  v. z5 _

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-28 05:56 , Processed in 0.076350 second(s), 18 queries .

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

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