全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑
. v1 A2 v# b0 U: P% W% |) }
7 Q% k" |1 D# i8 {8 J2 n
) }' l& u3 N; m& `8 ^5 i如图所示:
3 ]2 a5 D# z+ L$ m! E6 l使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:( J" O# X: s$ G4 ?! k( Q; h
  1. /**显示处理器加工时间*/# j  i2 X1 ?7 @" E* I! T
  2. treenode current = ownerobject(c);+ P' |0 h, q( S$ v) _+ U
  3. treenode  textnode = param(1);$ }" J3 E& e/ ?

  4. ' G, N: ^2 O' s: x' P( Y# Q3 `
  5. string starttext = "Object Stat: ";
    4 c9 x: f6 P, ~
  6. treenode involved = node("Processor",model());
    0 Z& s1 F4 K" O! W- U
  7. string statstr = "";
    # s, l* \2 z( T
  8. & w* ]& V& E5 o: U* s
  9. if (content(involved)>0) //如果处理器上有临时实体
    # w7 D( H$ w$ y  Z5 s: b
  10. {
    4 P" F( u) r2 l
  11.         treenode item = first(involved);
    ( v1 H4 _  o$ N0 X- A2 P$ h2 b" D
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE): z- c! W0 [; c9 I
  13.         {//如果处理器处于加工状态/ x4 c/ h* d9 N8 j
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);
    + V2 D- c% |+ m. l1 Y% H" r
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console7 R: j6 \8 O7 a9 x9 S
  16.         }        : r) O2 U: H! |8 \( o
  17. }
    0 M+ v' B2 H  m9 k
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console& w, r! m$ r! |$ B& @6 C9 l5 D; d
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

& L2 b+ h! g# U# ]3 m" T0 V
( s" G" h5 E3 X$ ^理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
6 ~0 }, ?$ ~2 u! O( J1 g' B1 s$ I: h5 m* o但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。5 C2 W$ ~0 Q% ?2 e
, R$ B! A  F1 r# C0 q, j: s
* i/ o7 f9 H' J; v' c
; c5 I, F6 k. T9 h( m

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 显示全部楼层
本帖最后由 zorsite 于 2018-5-18 13:29 编辑
3 d4 M8 M% f( r
& F. K9 w6 \% ?忽然有些觉悟。  f+ n" N7 m( h: e4 \: V+ @
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。3 |" M, P+ p  i+ c1 c
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 13:14 , Processed in 0.062763 second(s), 14 queries .

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

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