全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 6 a2 R9 g3 Z0 Z" y4 b' |' `8 @1 ^

# e% K- T$ ^5 N9 Y9 e3 O) ~9 A; E- M6 Y7 q
如图所示:
/ L( w! b) o. O2 S; f. m使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
" I) k3 z) t4 \4 d" x+ C
  1. /**显示处理器加工时间*/
    1 ^/ D4 K/ l" ?
  2. treenode current = ownerobject(c);
    . D7 o( D9 Z# U: U: @+ X8 K
  3. treenode  textnode = param(1);
    * [5 {1 Q% C7 D4 ]7 `2 i

  4. 1 g, y& g% r1 w# s3 {+ ^
  5. string starttext = "Object Stat: ";, v. j* r" G2 M! c
  6. treenode involved = node("Processor",model());& Q) [) w- h$ g/ j6 h/ ?
  7. string statstr = "";
    : ~- @# z  V. F" D5 e
  8. ' i+ v$ F- M  v. d  G
  9. if (content(involved)>0) //如果处理器上有临时实体
    + R  u. W: R" R: Y. s
  10. {
    % b& a, Q8 f: ~$ _& X" N7 L4 k
  11.         treenode item = first(involved);
    * i- l# D% U1 b8 ^  g
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)  G7 @5 ?' X4 e6 d
  13.         {//如果处理器处于加工状态3 y" O4 _0 t, H2 l
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    3 U9 r/ y6 Q0 j3 ]: v2 U  C7 n8 Q1 o
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    2 p2 s. r. O. R6 X8 y* M! i6 i) Y
  16.         }        ; h$ H+ @& w, @. e4 F" M
  17. }
    & f+ _: C* ~6 A# G" n* m0 [) O2 X  R
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    3 c' E- l- [4 x1 L. h
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码
" g+ s, z# _$ K" ~0 o! e
) I: \* Y  f; V) Z
理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
9 x$ i8 H: `, D) y# X$ s8 ]+ f但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。, _! u* o1 R8 J' y: r  S" W2 R

: Z8 H; R4 q/ D* ~7 y3 Y/ ?1 ^) _" z6 P
* m% k7 K2 [- \7 H6 V( g

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 只看该作者
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 ! x: @6 V/ ^* m! }
- }! y5 Y3 q7 @1 t1 Z& u# N
忽然有些觉悟。4 \0 W. A* q( }7 b8 \  @
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。, M1 ^+ I6 k" \& {
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
3#
慧娴亚伦 发表于 2018-5-20 09:27:41 | 只看该作者
声明变量作用域的问题0 O7 f) j4 H4 p
在代码执行过程中,某些变量值很可能发生变化,但是提前获取过的声明则不会发生改变。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-28 08:14 , Processed in 0.081372 second(s), 14 queries .

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

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