全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
& o" G4 D- H& \+ g. H3 p( o比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:- e( p" m6 c% `! v* \% O$ h
Table LabelTable=current.labels["LabelTable"];
  s. o- e7 J+ u- H- r- |! l9 [) @LabelTable[1][1]=5;
  N0 q  N6 j/ |; B& y; R- q0 J
. d% R: _4 D0 J3 ], [/ Q- G; N2 S. v如果直接对表格标签赋值会报错,比如以下语句:
' x: O$ H4 U& \2 t- P* P0 e, `current.labels["LabelTable"][2][1]=3;5 G/ \+ b" B1 |8 c+ L% F

. N( G$ g5 W  W/ e% g! C* v1 A  y+ I再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
) {- J. j# N4 X- M7 ?# P; v+ T3 }Object Sink=model().last;* S5 d$ i. Z$ z! Y( f
Sink.location.x=0;* B0 J5 d! u- \! ?( `. \( E
如果不声明直接引用则报错:
  [; K0 g0 C; E1 _% w5 u; w2 Q8 Wmodel().last.location.y=0;/ v% }1 O1 ]/ m2 R
) Z7 C2 }4 q- I9 b: X- d

/ X+ V9 a8 o2 Q2 f$ D9 J如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。# H9 s$ `  ]7 m/ b  U) C
比如:  d2 _' `6 R5 ~( L- T+ ?
treenode sink=model().last;
: k- J2 P( H; x. T$ Ysink.location.x=0;
- r1 S( S% A" |) \
: Q4 V8 O. R; u7 x" _0 q这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
7 l) \, r: ]& L6 ^4 O* L4 p" Z1 s  f1 L! h+ ^" Z" s9 S$ Z7 Q* w1 I9 h! L0 Z
" r7 o( m+ {2 X0 N7 _& o& e5 N' k
明明是使用了错误的属性,为什么会报Label错误呢?
3 |+ N" g. Q( t/ [Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
7 |5 T: ?/ A9 {1 H/ k对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
1 R, ?) t$ V( r- Q2 X+ P6 K2 y0 ?4 n: R0 }* n  @* ~
% a  Z3 ^" i' Z5 g# }+ ^. w

本帖子中包含更多资源

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

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.0 c/ |! I% P& ~. y

0 L' I9 n  T& e  ptreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。# `4 h% y$ T6 |8 z
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。7 f: \6 `2 p/ Q+ \, z
Object继承自treenode,但是比treenode拥有更多的属性和方法。( x6 M) \; m( M/ a
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
3 j& o: c' M& E/ O+ M* i$ n2 z# W
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
$ N" c: p* @" |3 p8 J8 z) Z$ w/ y5 y- c, O, `2 v9 \7 v
. I. b4 s* L3 ?+ o# z
/ r4 A4 @* R1 Y: a4 V) ~# W

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-9-6 04:10 , Processed in 0.074716 second(s), 15 queries .

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

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