全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
( e. ^9 F; v( m. _比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
4 ~4 S6 ?' s& _  x! l1 x& STable LabelTable=current.labels["LabelTable"];+ y, }& n. L7 o) V: x
LabelTable[1][1]=5;
  O) m: }" v& {8 F) O2 }# o
& ^7 ?1 K% f" Q) K+ T+ V如果直接对表格标签赋值会报错,比如以下语句:5 d: X8 F# p* l  d7 I
current.labels["LabelTable"][2][1]=3;( S0 p7 C  n" w( C3 N. a0 H

" A0 v) `9 v: V5 {! m6 X& d再比如,将吸收器声明为Object类型的变量,则可以使用location属性:: h8 f3 k+ S. G( D
Object Sink=model().last;
+ ~* F" q" F6 g1 SSink.location.x=0;+ d6 q; e5 o: W- _. [% {; A
如果不声明直接引用则报错:$ H$ c/ h1 {6 X# |
model().last.location.y=0;6 n0 S# U: x% t

6 t* E' X: j" U0 n1 |; y4 O, F, w- g0 t0 G  X# l
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。, O/ `$ G/ A: X3 c5 o
比如:3 }) E% z+ s! h& V; Y( n; [( Y
treenode sink=model().last;4 z; u$ B* C+ a& z- a
sink.location.x=0;( g$ T9 d1 W0 w4 D$ U

7 O5 ?6 y5 ~- x2 i6 ^# g. t! Z这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:% G: R# d) W' A3 U, s0 I0 ^
- g9 q5 I  G4 ]$ }
4 U7 ~' v: z$ N/ N/ s
明明是使用了错误的属性,为什么会报Label错误呢?
+ b+ U3 o0 X* b; g' oFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
  s. `/ ?* v4 |  j# t# v/ i' w" e对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
! A: |) s5 G; R" E1 _( Z! g3 Q# @5 h( i9 E: _0 \
% f4 w* {& _% M  |& M  V

本帖子中包含更多资源

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

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 `( A# U; m! ?% s6 p' O8 D" ^, }4 R* @% q" i( A
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。  S8 j( u3 G$ V/ ~: e3 Q3 Y
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 显示全部楼层
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
* N' l, H. x0 M: EObject继承自treenode,但是比treenode拥有更多的属性和方法。
- {1 P: _# t' H+ W6 _未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
% @. `# J$ m& X9 m% T( F4 i1 a1 c
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 显示全部楼层
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 : M0 a0 N: U; E* e" t* G- Q$ f, H

% L9 Z! q  t& I9 k4 M, r, L$ G- K+ P/ d, w  c  Q  [( f

8 ^# T6 g% }; _8 L: J8 l: T% _3 w

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-6 09:37 , Processed in 0.059872 second(s), 15 queries .

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

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