全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
zorsite 发表于 2018-5-17 10:07:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zorsite 于 2018-5-18 13:17 编辑 3 y( z3 j! {; G, g

' T+ s! ?# O' [+ H, u
8 [6 n+ y4 G6 P* Y, F4 a) g3 J如图所示:$ B& U7 K) ?8 o" V# |# D  G
使用Text实体显示处理器加工时间时,想要同时获取临时实体的类型值。以下是Text Display代码:
8 ]; K0 H2 G8 }3 ~
  1. /**显示处理器加工时间*/. V) ~  M* p" a
  2. treenode current = ownerobject(c);( {$ f6 Y- A5 f# I- m  J  @  _
  3. treenode  textnode = param(1);% e  V8 e; A$ ?9 K9 W
  4. 9 G4 d3 ]& U" L) `1 ]3 h! B
  5. string starttext = "Object Stat: ";5 ?! `, q; B' E
  6. treenode involved = node("Processor",model());5 h2 h7 j+ m9 l4 p3 q4 f
  7. string statstr = "";* y" ?! r" R) ~

  8. # |, m' I9 @5 f8 c; q/ d: O* o1 C
  9. if (content(involved)>0) //如果处理器上有临时实体
    % R) d1 g) a7 q6 R+ z$ M8 T; e4 r
  10. {, j7 r- e+ f) E/ X" R: }
  11.         treenode item = first(involved);
    $ B6 l0 I! m( m+ t  [3 I
  12.         if (getstatenum(involved) == STATE_PROCESSING || getitemstate(item) != FRSTATE_INQUEUE)
    8 K9 X% }" ?0 S
  13.         {//如果处理器处于加工状态
    1 b6 H* |* S* g  r
  14.                 statstr = numtostring(getitemvar(item, ITEMVAR_PROCESSTIME), 0, 2);& n: S9 b/ f3 K  m
  15.                 pt("01-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console0 ~* f1 x5 j" j
  16.         }        9 k$ C) B" K2 u( @
  17. }
    8 Q: V5 l3 l& p) {6 \
  18. pt("02-");pd(getitemtype(item));pr;//获取当前正在被加工的临时实体的类型,并输出到Output Console
    # h4 d  H# J8 J
  19. setnodestr(textnode, concat(starttext, statstr));
复制代码

  I& h6 o: a" `! e, \/ z
% i) E  [) [8 b理论上来讲,如果处理器上有item正在被加工,则不管是在if模块内部,还是外部获取item type,都应该是一样的结果。
& Y: x7 q, a3 N* u但Output Console观察到的结果却显示:只有在if模块内部才能正确获取到item type,写在if代码块外部的语句无效。
3 i0 A: m4 _6 ~* ?7 c. P9 K" j# d: O8 }2 @  @. z* g( L
4 Q7 e2 J9 R+ X8 |3 b5 U5 n9 r
5 L% O, K2 @3 o

本帖子中包含更多资源

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

x
2#
 楼主| zorsite 发表于 2018-5-17 10:16:54 | 显示全部楼层
本帖最后由 zorsite 于 2018-5-18 13:29 编辑 9 v0 t5 [1 f2 P' ]+ H% a

; |# E5 p; x! b. T9 ^, v忽然有些觉悟。+ x4 a9 u+ E3 ?9 f6 p% y
将item的声明移出if模块,放在if语句前面,则两行获取item type的代码都有效。) A" f$ f" c  S$ ~' p/ e$ r+ ?
在if模块内部声明的变量仅在模块内生效,也不能传递至else代码块。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-12 10:22 , Processed in 0.068822 second(s), 14 queries .

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

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