全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
# U) ~* E) ]& C( t( H比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
% y! C! w% D1 wTable LabelTable=current.labels["LabelTable"];. a! I- p6 s, i1 [  P0 x
LabelTable[1][1]=5;5 w) j/ n2 i5 j0 i' B7 k, B
4 }: @6 p( V9 z0 S, a
如果直接对表格标签赋值会报错,比如以下语句:
9 O: ^; s$ w( d0 v8 n- fcurrent.labels["LabelTable"][2][1]=3;
4 }. u$ u# c+ D6 Y5 Z3 m8 x5 O) v" z+ S& C0 N
再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
9 D  {$ U& i0 m" [* mObject Sink=model().last;, ~7 t7 U/ g$ s* l  C3 C3 T7 G. ^
Sink.location.x=0;
: S: O* i) E% I# [( c如果不声明直接引用则报错:& E% M/ Z+ F; R9 h, I& ?
model().last.location.y=0;
$ F" W1 |# l% |, Q* C: w! p! m6 X
7 a% _2 A9 n1 A9 x) z
, ?- I, K! z+ D5 C6 K" s8 z5 O9 b如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
( H3 b! m1 D, Y- c* T( h比如:4 C, f2 o; }+ u+ [; `) ^9 w
treenode sink=model().last;
- q3 u( J5 [' v8 E, O- Asink.location.x=0;2 _' |. r2 ^) ^/ L4 x$ I

0 s/ U, q7 }+ o* q: z" c这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
" [+ U1 s4 i+ G- \/ h
1 t2 e9 ^6 x" ^4 f8 h3 P6 `- C$ t$ [
明明是使用了错误的属性,为什么会报Label错误呢?
' y* Q: v- x" x0 o' [. eFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
9 l, b3 P/ i# ?: z4 V0 C对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
7 W4 S3 X: L( R- Y) S$ p7 i* A* n
! d$ b# ]' D4 G  H) ~  c, B* n
+ L. m3 }! ~' Z  v( N

本帖子中包含更多资源

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

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.$ n& s( M3 f4 U' T2 x
: b9 ~  X" z/ Y3 i+ g+ \
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。3 e8 y& h; _9 ~* y  {: K7 i; D
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
" S8 Z2 v' v9 q) ^Object继承自treenode,但是比treenode拥有更多的属性和方法。
6 L1 u) o$ Y9 ~未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
+ Z& i8 \2 R; C2 B
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
7 _* n" U& m% l" }; s
8 l& C1 t& Y  W! B' @( C5 Q4 X' ?) L
+ h9 p& H/ p0 _/ K5 o  w7 o3 P, A' u9 `$ f, a$ T9 m9 w4 i' a' ^

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-6-2 15:48 , Processed in 0.090704 second(s), 18 queries .

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

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