全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。, e/ y" z2 x9 K3 j8 `" j
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:" h' t/ j1 ^! @. c
Table LabelTable=current.labels["LabelTable"];
  y0 _/ t& ?- K3 ?LabelTable[1][1]=5;
* P9 s+ S5 E$ X) U2 p3 d+ ~0 r" n* L9 H( ^( e& M
如果直接对表格标签赋值会报错,比如以下语句:
5 V# }7 \; S1 z8 \, n/ mcurrent.labels["LabelTable"][2][1]=3;1 f. s$ L' Q0 j( H; i

: F) q4 A: h7 _7 G7 E再比如,将吸收器声明为Object类型的变量,则可以使用location属性:& M0 m+ j. ~; f3 H3 }& s/ ~: b
Object Sink=model().last;5 J' [; h. y" Z2 W# F/ z
Sink.location.x=0;7 j5 Y: P5 P4 s5 s1 H. h. I
如果不声明直接引用则报错:/ D" K/ c4 _: h* ?1 f
model().last.location.y=0;
+ @: H# ~% P9 E; ^; |0 b4 t
! J1 h8 J- S  L& _, w/ K/ E
: z: u% E/ |! N7 F. k如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。# F) {8 Q8 l2 O7 A( P$ N
比如:
: x$ u8 R$ g% d1 ?, u" O1 _treenode sink=model().last;! c- `: L) q1 F% y, L0 ^
sink.location.x=0;8 S4 c6 E2 n0 v; G' Q" X& c1 {

7 F1 H1 \, o$ i这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
# I/ B4 k  w8 `7 Z
, d+ W/ l$ I; ?5 N: H4 i5 k
+ O3 o: e0 A7 ~1 {5 k明明是使用了错误的属性,为什么会报Label错误呢?
( [! L5 Y$ d' r9 U2 X, G# B5 fFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
( Y& V' C+ O8 D对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
' b0 [& E& r+ O. ~% ]
1 n0 f. R& }  \* O- r) B8 j9 t- l$ |* l+ I; G

本帖子中包含更多资源

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

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.# `; A) Z: n* {0 E  f9 }3 @3 t
* S7 }5 X7 Q7 w  c+ n
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。: }& c3 E5 B5 Z- z+ k: B  e/ U
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。  D6 }! A$ V% t0 `& f9 k
Object继承自treenode,但是比treenode拥有更多的属性和方法。
4 G* k& G# {: @0 S! ^未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
4 V. j: X5 G/ p
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
9 g- J/ o2 p# W  i% m: f$ b& N, A0 g

# a4 J; {2 v' ~
2 E: |3 ^6 L; ~# N  j& Y

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-7-2 20:44 , Processed in 0.069643 second(s), 15 queries .

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

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