全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
6 Z5 a/ g# V: \. y6 g* L. f9 M比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:' Y) Y( Z' E; K: r1 v# Z
Table LabelTable=current.labels["LabelTable"];0 s* P2 C3 }& [. g. `" t' h9 P
LabelTable[1][1]=5;8 |6 c3 W! J1 [! J! |/ h& _* @

3 @- j  w' |& j0 j0 R如果直接对表格标签赋值会报错,比如以下语句:. A0 Z/ g# F3 X' C6 W4 ?
current.labels["LabelTable"][2][1]=3;
, }: G6 W# \5 a; q/ A0 z$ G
1 f* f& R+ r% ~0 H0 D# T再比如,将吸收器声明为Object类型的变量,则可以使用location属性:1 r7 ~2 p  X( K0 V
Object Sink=model().last;# h" t) f( u/ }  k0 `( y9 X8 A
Sink.location.x=0;3 M6 B2 I3 A' T: E& O0 [- ^) \
如果不声明直接引用则报错:
+ W, [5 b+ X6 i% x- f8 v* G! imodel().last.location.y=0;
& u6 T$ Y0 F7 @; G  s. m& S. l7 }% r8 C9 r
7 @. r4 ^2 u3 e, V% D* I$ P5 S3 y
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。6 l7 I3 F6 ]$ n2 h3 W3 \" I8 C. H7 \
比如:
2 }) e) h, K: L) y& |treenode sink=model().last;
7 \1 U9 D4 v; x8 \7 o5 g9 v: ^sink.location.x=0;4 |/ Z, X+ _+ X" L5 A- L, {' u

- x- i8 j4 N# r0 x6 Q' J这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:) n$ ^4 R" }& L  h: \& A
2 ~' V2 E2 L: H8 m

" k6 H! _# J5 ^+ a& A. ~& L明明是使用了错误的属性,为什么会报Label错误呢?
3 U6 U. e* A8 d. lFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。* s5 m9 [9 W6 e' l1 w# G
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。  f- u! `( Q7 i
. O0 b' N4 I% c4 f
: {/ N( Q$ b0 ^1 e' ^& e% l0 A9 y

本帖子中包含更多资源

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

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.' x$ t& _) y8 E1 t* Q# ?- Z

' f  d' f6 i$ N- p2 T' Ltreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
. t( L2 s# ^6 ]! N
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。# {& M9 ]) m' U: t7 R
Object继承自treenode,但是比treenode拥有更多的属性和方法。
6 E. ?/ h+ e" w未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。/ L9 i9 s# Q4 g" W& e( ~: M
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
) w4 L7 J; V/ T! J* q
/ Z2 ^, Z/ u. G: S' U3 d8 j
8 y$ X( X/ q0 |0 C# O0 ?1 B. j/ [* b
* y, V4 J: H9 A0 T, ^8 y& q

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-28 19:09 , Processed in 0.085213 second(s), 15 queries .

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

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