全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
( }1 j% F8 W2 q% O7 {; F比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
. [8 M1 i5 k6 |Table LabelTable=current.labels["LabelTable"];
2 i3 c$ w- N" eLabelTable[1][1]=5;
" q0 e; y$ ?' h4 n
/ C" c5 |; {- W, w4 g& G, l. S如果直接对表格标签赋值会报错,比如以下语句:& [  A3 w/ }) X9 e: p
current.labels["LabelTable"][2][1]=3;2 D( `+ Y5 Q+ ?: Y

* _* Y9 @+ Y9 g  X再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
. u" ]- P' U4 E' j. A% n2 Y( b. lObject Sink=model().last;" B6 x) N2 `6 l. u2 h
Sink.location.x=0;* J9 J$ j# c% c9 u- F0 R. x
如果不声明直接引用则报错:
% D3 `5 R2 y/ d% P' Zmodel().last.location.y=0;
- ~. B# A; S& q+ W9 u6 }' |5 N0 A( R/ ^) X$ H2 E% f# O) m
+ @" u. @% |$ v
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。" f/ T5 U5 f( t5 N2 h) k
比如:
  \( Y3 f- H# U9 L$ ftreenode sink=model().last;
9 O& Z6 E, Q# r2 z6 n, i7 {2 jsink.location.x=0;
7 r1 C* V5 i4 [8 L' p5 c
$ V% s4 H# H/ I( |8 C+ h# @" R这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:5 x. _  I  R( Z0 w, i/ F) c; p# T
& q* E9 T1 V* F% J! B5 B

9 u2 Q+ ]3 K7 J2 G2 E明明是使用了错误的属性,为什么会报Label错误呢?
8 G, @! a2 z: c6 t& _6 q6 UFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
: Q# ]* r4 \' h: T5 `, y( I对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。' x! ^8 }9 g+ S3 ^
9 n+ _$ w; ^) E7 v* z) B
* F( c" k% k. Q1 A3 A: ]) X( K7 q5 [

本帖子中包含更多资源

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

x

评分

参与人数 3威望 +54 收起 理由
shadowwind + 24 赞一个!
慧娴亚伦 + 15 很给力!
SunshineFu + 15 很给力!

查看全部评分

5#
慧娴亚伦 发表于 2018-7-4 08:14:06 | 只看该作者
肉眼判断的方式:就是添加点语法命令的时候是否会自动变色,如果没有变色,也说明没有声明为Object或者根本就不存在该属性或方法
8 L/ _* z% E/ w1 b& }0 r但是在利用标签名使用点语法引用的时候,可能不会变色,但是也能正常使用。这是因为该标签是在运行过程中创建的,在执行该代码语句的时候,标签如果已经存在了,那么就可以正常使用。
, Q8 C8 }9 N! V8 S- O  N' u* ?这也是为什么点语法在检查语法的时候对此类情况并不报错的原因。
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
! L6 j$ ?9 b6 }  \) P1 V
. }2 s& D: x3 h0 R/ V- `+ R! W! W  i4 a/ V( O/ `& h. f9 e% o) V4 j

: n1 t( g2 a4 P1 t  T+ t

本帖子中包含更多资源

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

x
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
% b% W9 d; b9 s. m; i- C/ b8 C# fObject继承自treenode,但是比treenode拥有更多的属性和方法。
( M& g, S: [* j5 |1 u0 s$ b& H0 Q未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。5 P* t; j2 k9 }9 U, j
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.* M& o. e# Y5 v1 R  k9 B

7 f9 P& h6 Z" a7 e- Q! etreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
* v8 M& D: g9 t* l! x- ]( \* |! H
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-26 12:18 , Processed in 0.065704 second(s), 16 queries .

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

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