全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
9 S! V: o- }4 f2 v1 ~. y% o比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:8 g& a& e/ j4 U4 T" k, W
Table LabelTable=current.labels["LabelTable"];
+ C1 p) J7 o6 E6 @3 V2 Y) kLabelTable[1][1]=5;. a5 M# a4 z' b, [6 B

* ^7 |# O) u5 R; w% H. g如果直接对表格标签赋值会报错,比如以下语句:5 K2 f1 Y$ {% g9 a  O( S. z0 V* Z2 j
current.labels["LabelTable"][2][1]=3;
" X$ m' ?- H+ D4 K# b, ]
0 R' t* e: x/ |再比如,将吸收器声明为Object类型的变量,则可以使用location属性:: Y" b' O5 _$ a$ @
Object Sink=model().last;
/ Z* f1 A: A  F: X% ]& cSink.location.x=0;9 B% f2 k, g3 W) L
如果不声明直接引用则报错:
/ a& Y" r( N. Tmodel().last.location.y=0;
4 z, z$ {5 d* z# e! @. ~% }7 U0 _% l

6 N6 z7 N3 ?; R  J7 D# `如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
3 j& S% x; U  t比如:4 y. `6 o4 m% n: a! Q  q+ J& w
treenode sink=model().last;, F. X5 q5 |# S, P5 m4 P8 i2 u
sink.location.x=0;
) T; n- k* s! H2 z, T/ Y) O
7 p$ X8 D. |1 ]3 o' E8 `这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:8 Q7 [1 ~. @8 n$ O1 m& h2 _
" g7 \! ~  P2 @5 a: S4 ~9 `

  a8 `. A, v6 F" k# H4 E' H) d明明是使用了错误的属性,为什么会报Label错误呢?% f2 Z" }  O# J
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。, N) F; b1 b% F: E+ E
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
. T' G# H& s$ Z& {% e  j. t1 D
+ ]# H3 p4 g/ {; }; E
  b: J& N9 N* [) Z+ i5 p* T4 U

本帖子中包含更多资源

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

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.7 a. j( i1 m; d0 O9 N# j

0 L1 [' ?5 D$ G3 e5 X% }treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
! b0 R) L! O6 b! j
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。6 y& u: g2 L3 {+ Z  ]
Object继承自treenode,但是比treenode拥有更多的属性和方法。
' ~: B6 l6 Q0 K6 |5 j& A, y' S4 \' |3 V未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。6 t" s: j% C# H% ?7 p3 ]/ p
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
0 M9 d0 R3 \5 o% A1 Y7 c" g. S$ d7 C2 n4 r. \% P# \/ L) b

; r" u' M; U: X% d4 I
7 W7 o' E8 s( h  L, G

本帖子中包含更多资源

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

x
5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法3 X# x9 e- G. ^1 P" W: t0 [" v  T& ]
但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
( y5 V( P  i% f1 J, G1 D0 M  {这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-13 15:54 , Processed in 0.073732 second(s), 15 queries .

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

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