全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
# g! \8 |  K. G: I" s# J比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
7 l0 F5 q: b- m8 m. j0 Y. k& DTable LabelTable=current.labels["LabelTable"];
/ E: Z! K1 X; Z6 U3 v* j! a4 s( x* d. zLabelTable[1][1]=5;
5 c9 E  F8 Z- w0 T; l0 U6 @0 x, S. C$ Q' P! O- S
如果直接对表格标签赋值会报错,比如以下语句:
  A1 u" ^. w* ?1 l; X; Q, t/ {2 Jcurrent.labels["LabelTable"][2][1]=3;
5 h( I7 t/ A4 r( i  [* d
% k3 E6 s4 S4 P7 ^- \再比如,将吸收器声明为Object类型的变量,则可以使用location属性:) e/ D' m$ R1 a& u; l7 {3 L% r
Object Sink=model().last;6 [2 W$ n) B( y; d6 p* y
Sink.location.x=0;
3 B% E" o5 A6 O# [# u/ Q1 y. j如果不声明直接引用则报错:
0 A4 T1 C$ F( [8 K/ g8 t5 bmodel().last.location.y=0;
' I3 z2 M9 m% e; g! E- }! C* [4 w3 n5 D

: m3 G/ B- ~  t2 Y  `* l如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。) |6 h4 A# G9 g9 l# N
比如:
$ j, g! \, x. ytreenode sink=model().last;
+ {' u" h0 |5 o0 D# Vsink.location.x=0;/ W0 ]4 B& e: H, J! b  |# ^1 i

8 Q" G+ q: E* U$ g0 q8 `这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
8 m  w: W4 t3 m2 }5 A& C1 s
$ g! P2 J/ Y7 L3 J& [' b0 e: _' h
6 h  O) U& \* t) B8 m明明是使用了错误的属性,为什么会报Label错误呢?7 y2 Q+ ^1 {- A+ g* U/ @
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。6 ]0 i! j2 m+ @+ A9 x5 i/ {
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
% X4 P. d7 ]. r, a6 J# B+ \; Y6 o, T# _8 Z
$ E) G: L2 u; i5 }7 o% F5 U

本帖子中包含更多资源

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

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.7 r5 d) l2 }" f9 O

) }: j* C/ o0 a2 f, ^9 _8 g. otreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。3 V, ^! ]4 U  K% N8 N
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。/ ^) U9 S% t1 x% V; T0 S. ]
Object继承自treenode,但是比treenode拥有更多的属性和方法。  H: c( D" X1 s) K- T5 U' _
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。9 J' h/ o4 \$ L/ w( G! L
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
/ m& [& Q- {% l' O& X( }  l+ p- p4 r7 z2 Z! w" W: M: S) w8 S

% u& _) A0 J( s& _( ]. q( f) W0 B1 m9 m( a5 V! |

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-9-6 10:19 , Processed in 0.080626 second(s), 15 queries .

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

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