全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-7-3 16:12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果想要使用某class的属性和方法,必须先将对象声明为该class类型的变量。
! Z: R7 Z' b* ]4 f比如,某实体有一个表格标签,先将其声明为Table类型的变量,才可以使用表格的[]操作符引用单元格并赋值:3 }( q; q& j2 [
Table LabelTable=current.labels["LabelTable"];  v& _) `2 s. Z* e6 A
LabelTable[1][1]=5;
, s8 U: Q2 b6 z9 m4 j& s. p; O) Y! B* s
如果直接对表格标签赋值会报错,比如以下语句:# c+ S, R. y( j! C" u: @$ [' P
current.labels["LabelTable"][2][1]=3;
" `1 j# V0 Y/ n! f& o2 i7 y
7 W+ w3 Z& p0 t3 t再比如,将吸收器声明为Object类型的变量,则可以使用location属性:3 G2 w2 S( W" a& p& t
Object Sink=model().last;
3 ~9 F4 a/ i/ JSink.location.x=0;+ V' D' m* V( B% d
如果不声明直接引用则报错:
6 }+ i3 i5 U, b) `* e$ U& Qmodel().last.location.y=0;/ p% d2 G# c! q8 u, T
( B$ ?0 Z/ y8 d) @3 R

( L( |7 i/ X( s' Y如果将吸收器声明为treenode类型的变量,也无法使用location属性,因为treenode类并没有location属性,只有Object类才有location属性。& x' S6 ~- q" f/ b! F9 c& y
比如:" J- k' ]+ P. C4 h
treenode sink=model().last;
4 d" b7 S4 G5 r; l$ \9 Vsink.location.x=0;
  h  M# a" E/ I7 G' p9 [1 Q
) x+ N9 l4 F5 ]. g( n这样的代码在语法检测时并不会报错,但是运行是就会抛出异常:9 f0 J8 [( N/ {2 {4 |6 z, g' t) t3 J

4 k+ L% F1 O! B6 x3 z" o' l$ ]: k. E( `
明明是使用了错误的属性,为什么会报Label错误呢?: F# b& U8 ?  X9 u3 \
Flexsim并不认为location为属性,因为在treeenode类下没有该属性,只是建模者自己一厢情愿的认为其是属性。8 z* y5 j& m: |+ |- u  L9 N8 V
对Flexsim来说,节点后面跟上点符号(.),引出的是属性、方法、标签。既然Flexsim没有检索到名为location的属性和方法,就会判定其是标签。但是我们并未在吸收器上设置名为location的标签,因此系统报错:标签不存在。7 g; P/ O6 z% l# u9 h/ }3 t
# A* J# d3 X) p1 d

- J& D2 q0 Q0 [5 W* q* ^4 j

本帖子中包含更多资源

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

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./ v( I/ {+ V  p& ~( w# E& L
6 a* m9 U1 C' {6 x% O! [* x, h
treenode、Object、Variant(等)类型的变量,可以使用点语法(dot sytax)调用方法,获取属性、变量、属性(特征)、标签(如果存在)。/ ^( Y0 j' s& W8 D* g/ e/ @
3#
 楼主| zorsite 发表于 2018-7-3 16:26:43 | 只看该作者
treenode和Object看上去很相似,在早期版本中没有Object对象,都是用treenode。1 j( y9 X6 y1 M+ n' Z
Object继承自treenode,但是比treenode拥有更多的属性和方法。5 q5 A: E% @5 O' F( B
未在Object中列出、但treenode有的属性和方法,Object可以直接使用,但反过来不行。
6 B/ d8 q, R5 Q4 e! b1 d; O
4#
 楼主| zorsite 发表于 2018-7-3 16:38:17 | 只看该作者
本帖最后由 zorsite 于 2018-7-3 16:40 编辑
! a2 X+ x6 ]  B( W) }
0 ~: T  R6 U, A" u" g! r- Z- m& \  O) y2 d5 l0 E
; x9 ^  o4 [3 l1 W

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-10-26 10:27 , Processed in 0.074318 second(s), 16 queries .

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

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