全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
0 q0 c$ {2 e. g; }( ]9 A& Q. {比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:
$ h" ^- Y- R- A, y9 {) uTable LabelTable=current.labels["LabelTable"];
* a" w  A& d6 |. oLabelTable[1][1]=5;
/ |) c' f3 @0 m8 v7 R
( U$ H+ V* o5 i; Q% t" S6 }8 Q" y8 \如果直接对表格标签赋值会报错,比如以下语句:
5 R, b$ m- |  Q8 Ncurrent.labels["LabelTable"][2][1]=3;5 f; `. l1 D) x

+ k! b$ @+ m* t, o, F( V0 x6 g  ~$ c再比如,将吸收器声明为Object类型的变量,则可以使用location属性:3 y# @- `& p% L
Object Sink=model().last;
, e! U3 w. E& USink.location.x=0;7 Z  n0 k, h2 ?, j" R2 l4 y! g
如果不声明直接引用则报错:
6 {- l7 d! J; R8 c' V5 ^, Z& mmodel().last.location.y=0;
: R/ N# {: f. P9 f. B% J, [1 M
( S! v" M+ a# m( H, \9 Z. Q: X4 T$ L, ?5 C5 l
如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。
8 t: m0 z2 w4 l比如:
4 Y! K; R/ T. X% q: E% H$ Xtreenode sink=model().last;
% X; @1 I/ j/ h  [sink.location.x=0;
! g: Y9 w+ `  e/ X- y: C
; R' B- y  d* J5 b- O5 V这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:, ~" c' ^0 |' a8 X1 X4 E

9 e; J, Y+ C. ~0 T% ]* Z0 [( Z9 I  g1 Q) X
明明是使用了错误的属性,为什么会报Label错误呢?+ w! Q; g' w' U* F3 ?
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
! t( ^% G% Q$ Z3 k对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
; z& B4 t% o) Y  m+ a/ h7 G( e4 z/ V/ D: M
0 C5 V& ?' _) J! I- k

本帖子中包含更多资源

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

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.
8 k' T: G1 w) K7 m. F, G
* W( D/ O5 P" K& d% G; Htreenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。
. L( S5 y0 ?) {% `
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
, q8 C4 C$ |- T( M; w* I2 V: YObject继承自treenode,但是比treenode拥有更多的属性和方法。
5 Q" a1 l+ h  Z* d1 s未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。% |+ Y* C2 {0 P+ ?8 Y! i3 Z% B
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 / t0 m7 g' E1 g1 W: q' ?
0 w  z" a  U- }& Y& b$ W5 M3 y
( `: ^5 @0 }$ U! A
4 G5 j& [- d( o5 A

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-10-26 12:21 , Processed in 0.069446 second(s), 15 queries .

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

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