查看: 1|回复: 1

releaseitem命令简介

[复制链接]

主题

0

回帖

544

积分

中级会员

积分
544
发表于 2017-5-13 12:11:39 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 zorsite 于 2017-5-13 12:25 编辑 [/i]

[size=4]releaseitem(obj flowitem [, num port ])
[/size]释放指定的临时实体。
releaseitem命令仅用于以下两种情况;
1.临时实体在基础固定实体(BasicFR)之中并且尚未被释放。
2.临时实体在任意固定实体之中,并被holditem命令控制。
第二参数为可选参数,用于指定临时实体的输出端口。如果指定此参数,临时实体被释放时直接由指定端口离开,并不激活“发送至端口”(Send to Port)触发。如果省略该参数,将由“Send to Port”来确定输出端口。
本命令执行后将返回一个整数。如果第一参数中指定的临时实体存在,命令执行后将返回1,否则返回0.
[font=黑体][size=4]
[/size][/font][font=黑体][size=4]命令示范:
[/size][/font]releaseitem(item);
releaseitem(rank(current,1),1);
releaseitem(last(current),getitemtype(item));

实际使用中发现,如果要释放的临时实体不存在,程序将报错。
使用该命令时需要注意,确保第一参数flowitem指向正确。
[font=黑体][size=4]
[/size][/font]
[font=黑体][size=4]案例1:
[/size][/font]使用releaseitem命令释放货架中的2个临时实体,在货架的“发送至端口”中设置“不释放临时实体”(Do Not Release Item)。
1.如果命令执行时货架中没有2个临时实体,程序将报错。

2.假设货架存在2个临时实体。


(1)不使用运输工具。
第一次释放临时实体时,执行的是releaseitem(rank(current,1),1)。一旦命令被执行,第一个临时实体将立刻离开货架,此时货架剩下1个临时实体。在第二次执行releaseitem时,第一参数该如何写?是releaseitem(rank(current,1),1);还是releaseitem(rank(current,2),1);?
第一个临时实体离开后,原来的第二个临时实体现在变成了第一个。如果要释放原来排序为2的临时实体,仍然要使用releaseitem(rank(current,1),1);


(2)使用运输工具。
第一次释放临时实体时,执行的是releaseitem(rank(current,1),1);一旦命令被执行,货架将调用运输工具,运输工具先执行travel命令,行进到当前货架。也就是说,此时虽然releaseitem已被执行,但是flowitem尚未被运输工具取走,并未离开货架,此时货架仍有2个临时实体。在第二次执行releaseitem时,应写为releaseitem(rank(current,2),1);


3.在上述代码中,第二参数输出端口均未省略。因为在“发送至端口”中设置的是“不释放临时实体”,也就是说,临时实体如果要离开货架,将无法从此段代码中获取输出端口号,因此必须指定输出端口。可以尝试着删除第二参数,看看模型运行效果。
[font=黑体][size=4]
[/size][/font]
[font=黑体][size=4]案例2:
[/size][/font]假设货架上现有10个临时实体,并且仍在不断补充新的临时实体。
下游实体发送请求,需要5个临时实体。货架调用运输工具,已经发送了3个。
现在下游实体发送了新的请求,需要3个临时实体。此时货架应释放哪几个临时实体?如何实现?

主题

0

回帖

324

积分

注册会员

积分
324
发表于 2022-2-28 13:16:04 | 显示全部楼层
请问,不使用运输工具这种情况在哪里编写代码呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|京ICP备14043114号-2

在本版发帖
关注公众号
QQ客服返回顶部