全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
3 W: ^7 l; w! F4 |4 @- Z4 r比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:$ ]" Z, X; K% [" @5 B' M
Table LabelTable=current.labels["LabelTable"];
' ]! q9 r. w3 ?LabelTable[1][1]=5;
& k9 @: S9 ^9 r1 X% E) ?1 @# O, _& c
如果直接对表格标签赋值会报错,比如以下语句:
/ j9 p" a9 x1 R, x, _( ycurrent.labels["LabelTable"][2][1]=3;4 s5 g" {+ H- c

  c! I, ?3 ]) i6 e% k再比如,将吸收器声明为Object类型的变量,则可以使用location属性:
" {- w$ N. E6 T6 cObject Sink=model().last;
) c4 G  X) B3 f* n: \+ ASink.location.x=0;
4 j( ^% N* ]# }. E$ a如果不声明直接引用则报错:
! I' h1 Y* o7 \, ~. B& S/ @1 omodel().last.location.y=0;
- g) U; U2 x* q
. B; b8 e6 T# I0 M. Q% P& F
# b2 z2 e$ p/ o" S" I: H, X9 w8 v  Y+ |+ |$ J如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。( n, m8 V, L- h2 e/ r5 D' g
比如:* \4 B$ N2 B& D
treenode sink=model().last;
$ Z& L" Z" `* Y9 g2 |sink.location.x=0;
& }9 M6 Y8 y" {7 R8 e% E8 h/ s
9 A* t% R3 U- F$ j这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:
  }- w; C$ J0 l# `1 }9 C& p
: Q3 n. l* g' v; \3 h9 [9 ~# v6 @' S4 X
明明是使用了错误的属性,为什么会报Label错误呢?7 Y$ \. l, e6 c  W# C5 I/ T
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。
% Z4 e; F3 q4 o) r对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。
0 J0 o4 C# N' s$ X7 ~* R) g% P- m, ?; `) R0 ?+ u% Y

) F2 v7 P8 V. P. {3 T6 F

本帖子中包含更多资源

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

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.. E, o6 `: \- d3 b
3 U2 Y7 J! |) P+ H- Q2 H
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。1 y) f2 E; X4 }
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。
$ Y4 U" {# I0 [) n5 }+ e) m2 |Object继承自treenode,但是比treenode拥有更多的属性和方法。' b" F1 G5 H$ A7 u6 Y; }4 U! A+ \
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
! o- X& A6 m# d' b! F
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑 & @- |* V5 F: q

+ }1 O: `* J2 \* I+ z
2 U  D6 ^. _* t5 p
; g; M1 }" ?6 @0 R+ y

本帖子中包含更多资源

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

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

本版积分规则

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

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

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

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