全球FlexSim系统仿真中文论坛

搜索
查看: 6458|回复: 2
打印 上一主题 下一主题

IF语句声明的变量仅在IF代码块内有效

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 & Q0 X- @. d/ H0 f
. Z) x3 y0 m/ \: o. H
3 C6 @) x: @8 q2 z3 g2 ?
如图所示:
- t  |- v' X4 b3 g使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
( z: u, E, N5 [. V0 x" x
  1. /**显示处理器加工时间*/1 @$ g: Z6 S7 K& g7 R0 ^2 j
  2. treenode current = ownerobject(c);- H7 O& t4 k/ z: ~0 A2 w7 @0 R
  3. treenode  textnode = param(1);9 [% E. w& C3 @- H, H, ^
  4. * s4 }* a7 @# G5 n4 A# e
  5. string starttext = "Object Stat: ";
    $ e% p$ y" K, d: A  m/ v: U3 h
  6. treenode involved = node("Processor",model());
    # e1 y% s9 b9 F) ]* }
  7. string statstr = "";( W2 @5 g! q7 P* ^
  8. , `6 @+ P8 U2 F8 l0 ]
  9. if (content(involved)>0) //如果处理器上有临时实体
    5 }( c2 u4 m) Q) h' I+ z
  10. {' S& u# r* Z! @$ O6 L4 W9 O+ v
  11.         treenode item = first(involved);% C8 V. h- j# Y3 ~' e+ J
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)! S8 T4 m1 }$ _5 K. h3 w: A
  13.         {//如果处理器处于加工状态0 s0 L) V" e, Q- A
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
      T+ s0 @) X+ [9 V6 ]; N) o0 U
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console; d6 n7 Q4 }4 c( d9 F+ n# |
  16.         }        0 _4 @" X7 z5 n+ ?. N
  17. }
    # ^. n8 |2 n  a% @/ e" r% E! O0 u2 u
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console$ C) U/ m) W" f
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
1 x: V- H9 b0 O6 p% Y- z  ]

/ H2 b  C3 g! X2 A5 l理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
3 H' q! O# [7 L" j' E1 C7 I但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
7 J  m) n9 z! R/ C
3 c& i. j( B  j: g/ X
8 A0 t5 H0 a5 L& d. I' G( o1 U- N3 f: D4 m+ _, \2 G$ |

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
8 M" ^- p  m6 V$ ?' ]# ]# W4 w( l; M* L, S8 H, c
忽然有些觉悟。
" ~7 q* G1 E! V# M) @* P+ m$ A将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。
6 T4 W; @  I0 U2 E% d9 s- i* _) e在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题2 j1 z8 b0 u% A+ ^! k( I
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-29 10:44 , Processed in 0.073612 second(s), 14 queries .

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

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