全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
2 J3 X8 k9 m# ~# M; Q比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:, o2 _2 b' J; U* i& i" v8 g1 H
Table LabelTable=current.labels["LabelTable"];5 A- z4 K6 ^8 n) F1 o. v3 e" u) o( k
LabelTable[1][1]=5;" E5 N+ b) x$ D. l1 h/ f
5 \  i# D# m! Z8 i, J" E
如果直接对表格标签赋值会报错,比如以下语句:  v/ x5 n, t: C
current.labels["LabelTable"][2][1]=3;
* T( w' C4 H, p5 b4 a* d# }+ f3 r3 F* w1 H8 c
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:/ m5 ]6 K$ j; E' P2 M  p
Object Sink=model().last;) g) ]0 m1 Q8 f( q! n4 i
Sink.location.x=0;
: k5 {3 K' G/ A- R) T5 z) j$ W3 t如果不声明直接引用则报错:
% s. S+ l4 x$ A4 b# r9 ^model().last.location.y=0;
$ E1 G; T! |% d4 j, y+ |( D. k' N% B! K% l- R1 ?' d+ Y
" M. @1 w' s" `2 S7 ?! K+ ?8 K
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
" B* O% g+ d5 X5 n2 d比如:# j: g1 p: ?1 g" m1 @
treenode sink=model().last;
$ D5 e6 D, M  Lsink.location.x=0;3 k9 R9 `, a/ Q% E0 \
( d- U+ i6 @* o4 x. E/ k) E
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
: H2 |$ _+ ~' N! p0 R4 W. y( d6 k; T8 s: M  U) z

$ [9 f% q: {" t, C明明是使用了错误的属性,为什么会报Label错误呢?
- _; b0 H! S2 C' B- E$ M, gFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。) C5 Z# \% Q# Y% w5 n
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。  v) V2 e1 g- Y( Z
3 {. ]0 F% K5 {1 S

7 l/ y3 C$ c) V" u* S

本帖子中包含更多资源

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

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.
& `5 V" {& E+ P* X  {4 f, A3 v3 s- V' K& `
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。. u/ S& g+ S5 h7 N
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
  [! s* j- y- k! `Object继承自treenode,但是比treenode拥有更多的属性和方法。
" B6 }/ G: }( }未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。% {# P1 \( \$ L& M
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 2 w/ R  C7 B6 T( j2 d9 P9 g7 H1 n

0 b2 F* f, P1 v3 w" Q  j2 U3 w( [0 x
! Q8 Y5 E/ z+ H
6 S* T/ z4 u3 P4 r/ a; E

本帖子中包含更多资源

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

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

本版积分规则

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

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

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

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