全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
2 X/ T% n; Z6 R' n2 |$ U比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
+ k8 S2 T# w0 e  I% A% W/ O+ }Table LabelTable=current.labels["LabelTable"];# H6 Z- ?1 x) T$ j* o. e
LabelTable[1][1]=5;
) L1 E( f: D3 r
1 A% w! C" z0 g1 ~! i: h如果直接对表格标签赋值会报错,比如以下语句:  R# ]3 M# j9 z( @( Q6 d
current.labels["LabelTable"][2][1]=3;  Q* @2 _5 H: H- Q
3 M$ B4 y6 v. V* z3 i2 p0 G' [- K
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:* m, ]9 b1 T. E" V. C# b
Object Sink=model().last;& }. e2 t, k1 Y6 p- y' `
Sink.location.x=0;
* g( R  t0 P& t; @" \如果不声明直接引用则报错:# K3 C: H" l4 {, w+ Y+ ]2 k
model().last.location.y=0;
& V. k2 ~0 @& F3 t) Z. {. T, G3 T+ |, V* V0 j4 L1 e4 _# a: }! F2 S* t

& e$ B, g7 G4 x* c8 Z0 @如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。; V: z# A* Q1 {* r4 C5 j) k- |- f7 R
比如:
' b/ h% L% k3 E; mtreenode sink=model().last;' J$ ?8 e+ i1 H) z* L7 W/ \
sink.location.x=0;; \; P8 G# B: R

" v5 y, |9 m0 O* w1 J) @; s5 J这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
( V# y4 q2 S+ G3 o! D$ X
8 ]0 F0 C8 x  \, |6 |5 K5 ], G- u4 G- r- a
明明是使用了错误的属性,为什么会报Label错误呢?
) D5 T7 q2 J2 D  u4 i2 PFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
& [4 i5 O0 U# o& y对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
+ q  }% K# F/ q2 s" ^* J3 x
3 J* W- S: P% ~, R5 |5 t+ ~) q6 g# @8 r, C+ j9 h8 p

本帖子中包含更多资源

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

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./ i# }8 [+ C- B) h0 ~7 i1 Z& F
; T# ], w( v2 t
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。2 J) C# e: ~: z& P
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。1 b" q' o, ^1 V. ~
Object继承自treenode,但是比treenode拥有更多的属性和方法。
# T& ?$ ^5 A6 m( O/ E" a" [$ P未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
. @5 {: t1 O3 b) B/ g
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 8 P* F3 U! D: M. Z

% M: {8 k& g) T" B0 L5 a! w" p" O5 @! ~, l0 t. |

5 [2 g5 s- v  L5 u0 u

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-9-6 04:14 , Processed in 0.078307 second(s), 15 queries .

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

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