全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。. Z+ S$ D- B$ e
比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
, r4 D/ z$ Y; P4 \" BTable LabelTable=current.labels["LabelTable"];4 y1 P, R5 z$ E: y' P/ o
LabelTable[1][1]=5;- H3 {/ p5 F9 C  I+ M
  c1 z; m. z/ h/ y* p
如果直接对表格标签赋值会报错,比如以下语句:; G: ?; \2 n& W( Q( R) K
current.labels["LabelTable"][2][1]=3;) o7 q2 R7 m% s

/ Q8 _2 m7 {7 z; K# i/ O再比如,将吸收器声明为Object类型的变量,则可以使用location属性:3 w+ H! ]) L0 U$ t; a( N" q3 y, a
Object Sink=model().last;* Q& V- V9 K, U/ b) `* a$ @" w
Sink.location.x=0;
/ Z" k5 W8 L# c+ k! A如果不声明直接引用则报错:) t/ \4 v" p5 [# G2 x
model().last.location.y=0;, z8 m, F5 e7 G8 h6 j5 x

" W$ y6 m$ J3 a6 [+ F  {; U( U9 M
+ {$ X' a6 l2 ?0 V- @( ?8 h如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。2 v+ i+ `, O; g, S! O
比如:
9 r' `( s" D  [- Q8 |treenode sink=model().last;# T4 r: G/ U/ T5 C3 f
sink.location.x=0;# U# B$ U- _1 l- ^% G( @: [& x! M4 Y
$ y: u( \7 U- K1 e5 a4 j4 `
这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
! D; w  L$ x$ Q. {+ ^; F
/ f& Q3 q4 R, V+ L: L# z! X) p
( s% R/ E9 |' A' W8 k/ r0 P明明是使用了错误的属性,为什么会报Label错误呢?
9 u) Z3 J  W% h8 O4 k% NFlexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
6 v. `; z% c8 E对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
- D& M6 B3 o% R$ l1 V2 k* a" `) w

, z7 ]4 x* A; V  y8 q; y' b- 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.
# w7 f1 L" _* |- ]5 q+ t* E" S2 A( v& g$ ^. w
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。$ [: u: ]: g2 R3 v, d& Q+ Z2 L
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。( A: _  |/ s. K8 J' K
Object继承自treenode,但是比treenode拥有更多的属性和方法。
  B0 U3 ?" m  b, t未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
, L3 V9 g3 h' u6 t7 ]
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
, z5 Z" h& ^: g, Q2 ]+ ~" E2 L2 v7 z9 U! B- n/ j3 B  {. T4 E' r

5 C! t8 M7 u- x# x# s$ F- ]6 d2 {* A8 B8 S8 W" X

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-29 10:30 , Processed in 0.085535 second(s), 15 queries .

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

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