全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。0 g" ^+ n. V& G; W/ K
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:# C* h; x' E  M9 D$ J
Table LabelTable=current.labels["LabelTable"];
' ~. y9 Q3 N9 _9 ?8 VLabelTable[1][1]=5;" D; i2 e+ `# t

2 D; A' z" S$ b  g& i如果直接对表格标签赋值会报错,比如以下语句:  Z# C1 ?$ p9 F6 b
current.labels["LabelTable"][2][1]=3;+ ]1 f0 r$ ~: f7 s( p& `6 X
0 t+ h' x% j3 R5 k6 O: \! x
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
$ @8 u9 ]# }& o" N2 |4 }Object Sink=model().last;
! L7 o( E) O; b) HSink.location.x=0;
' U5 b. @5 S/ ?9 g! J如果不声明直接引用则报错:
6 D4 }$ N0 u) [& W( }- zmodel().last.location.y=0;
; T+ k; u# Y9 G/ I
  W* h2 r) D2 Y1 F- ]7 u( O! ]% H- B  d: T
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。$ M3 P5 v" \% z2 L
比如:$ ^# ?3 E1 }3 Z4 ]! t% x6 H" T( X  E
treenode sink=model().last;
' |+ P3 A# @" V2 x' Jsink.location.x=0;
+ H2 Q( _: D8 T. B7 Q. Q! e8 g$ S* u' ?( {! V
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:, g* Y: I5 }- \* B1 }
0 r4 b6 t6 _) S, f; N

% ]: |' |. T4 P0 I$ j9 k& `明明是使用了错误的属性,为什么会报Label错误呢?
3 K5 g; l' w( m0 T1 s0 [. OFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。) f0 C. C0 W) a, k) c' i/ E9 L
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
% h: l8 g* T" m5 M( e. ?7 _0 q$ W) c$ T" O! u! e

9 H( e# G0 a( b' o

本帖子中包含更多资源

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

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.
2 T: Y# [6 [! @  k2 ^' z* x8 g# e. l( F7 K$ h& c2 \
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。! X, l' \8 f$ M$ {2 Q
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。1 I1 n/ m5 a- i7 x- H) ?
Object继承自treenode,但是比treenode拥有更多的属性和方法。
/ \4 [9 f" a- `8 J5 |) O未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
6 L  f* d8 t+ C! W2 I+ J8 }
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
: G. T! h* L& A& M2 `3 j- i1 e3 _8 Z+ w1 {+ i/ M, o
+ U3 H/ |/ f" ~# K4 Q9 Q

6 l7 n- u: O( _

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-29 22:13 , Processed in 0.085671 second(s), 15 queries .

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

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