|
本帖最后由 zorsite 于 2017-5-13 12:25 编辑 " p, U$ {& E" i$ P+ y/ J# l* m6 r
( S* a. i t$ L3 |1 p2 v. \! ~/ Lreleaseitem(obj flowitem [, num port ])6 s, R3 B& q% |9 z
释放指定的临时实体。
' r. b6 L( Z. O4 Y( Ureleaseitem命令仅用于以下两种情况;7 \$ g3 X; l1 S3 ~' e3 T! t2 u
1.临时实体在基础固定实体(BasicFR)之中并且尚未被释放。
# Z* h8 x0 L1 v) a. O2.临时实体在任意固定实体之中,并被holditem命令控制。
. M; U: _ k( n) n第二参数为可选参数,用于指定临时实体的输出端口。如果指定此参数,临时实体被释放时直接由指定端口离开,并不激活“发送至端口”(Send to Port)触发。如果省略该参数,将由“Send to Port”来确定输出端口。
$ k8 O! c9 u+ M8 U* Q, F本命令执行后将返回一个整数。如果第一参数中指定的临时实体存在,命令执行后将返回1,否则返回0.+ \5 V. k! r9 i2 n$ c# Y- C
% ]! l& Z% e: l$ o& r8 N" Y# r命令示范:/ ^) h: D2 }1 c0 i
releaseitem(item);& Z1 }# w) w, ^3 i6 q
releaseitem(rank(current,1),1);
' l, l$ r2 D' k3 o/ P* f$ Nreleaseitem(last(current),getitemtype(item));9 Q: {/ I, ?/ @: ^
. S- z' ]5 o# u
实际使用中发现,如果要释放的临时实体不存在,程序将报错。* ]3 o; r9 a% |. U" ?' z% J
使用该命令时需要注意,确保第一参数flowitem指向正确。' m2 T3 _5 X& Y# t
0 e- t# v, w$ s* A! {; s2 c* W2 G
. C* }* \. X" r( a% L' X
案例1:
/ P% [7 Z) v( b使用releaseitem命令释放货架中的2个临时实体,在货架的“发送至端口”中设置“不释放临时实体”(Do Not Release Item)。' i4 Z' z" b; V3 n& `2 T
1.如果命令执行时货架中没有2个临时实体,程序将报错。0 k0 \/ s; [2 ?. {/ t: s0 s u
% J2 `& N3 `/ H. k- \2.假设货架存在2个临时实体。
& r5 F2 s- [) {, e3 x4 \6 j/ b
* x- ^ R/ `' a7 L8 G! D: o1 Q" o0 b. Z9 v% ^" ?) P' }
(1)不使用运输工具。( E) ~6 D1 o2 P( z, n6 Q# J) b
第一次释放临时实体时,执行的是releaseitem(rank(current,1),1)。一旦命令被执行,第一个临时实体将立刻离开货架,此时货架剩下1个临时实体。在第二次执行releaseitem时,第一参数该如何写?是releaseitem(rank(current,1),1);还是releaseitem(rank(current,2),1);?
. t" U/ m ~: Q y. P% \7 r- ]第一个临时实体离开后,原来的第二个临时实体现在变成了第一个。如果要释放原来排序为2的临时实体,仍然要使用releaseitem(rank(current,1),1);% G2 L) @) Z2 \2 W5 Z' F' r4 r, ?
+ e) d6 q! S+ U7 S* V) r M6 n; T5 s% C3 p0 @9 a. z6 C6 B `
(2)使用运输工具。
* T/ z9 Q) L+ A第一次释放临时实体时,执行的是releaseitem(rank(current,1),1);一旦命令被执行,货架将调用运输工具,运输工具先执行travel命令,行进到当前货架。也就是说,此时虽然releaseitem已被执行,但是flowitem尚未被运输工具取走,并未离开货架,此时货架仍有2个临时实体。在第二次执行releaseitem时,应写为releaseitem(rank(current,2),1);
: Q& T, S0 h5 n6 X6 R2 d7 p3 [( b3 Z3 u3 f) T( V1 J! N
% D$ ~- x4 ^6 e3 v3.在上述代码中,第二参数输出端口均未省略。因为在“发送至端口”中设置的是“不释放临时实体”,也就是说,临时实体如果要离开货架,将无法从此段代码中获取输出端口号,因此必须指定输出端口。可以尝试着删除第二参数,看看模型运行效果。% k( }& G3 ~ u4 V
+ L2 Y) \- W3 p1 z% Z' Q: Z; B
, _7 J) B+ m: Q( d& {( } W5 _案例2:
. V8 d; C3 r: I$ F8 q假设货架上现有10个临时实体,并且仍在不断补充新的临时实体。
8 p" [- h3 ?! w) i: y: b7 m下游实体发送请求,需要5个临时实体。货架调用运输工具,已经发送了3个。
8 t! D, ]- O; d% p现在下游实体发送了新的请求,需要3个临时实体。此时货架应释放哪几个临时实体?如何实现? |
|