不确定做这个挑战的最佳方法,所以我想再发一次。
我目前的主要问题是,我正在尝试创建一个系统,其中用with语句检查一个变量的值,该变量存储的是某个特定对象类型的所有实例,或者这些实例的一个选定集合。
以下是我目前对代码的想法:
function createRule(_ruleName="unique_path", _affectedPacketNumbers=[]){
// 如果_affectedPacketNumbers要设置具体值,它会是一个存储受影响数据包编号的数组,第一个数据包从1开始。
// 在数组和obj_packet之间切换作为起始集合,试图让错误代码获取默认值
var _affectedPackets = []
try{
//_affectedPackets = {}
array_foreach(_affectedPacketNumbers, function(_packetNum, _index){
struct_set(_affectedPackets, _index, instance_find(obj_packet, abs(_packetNum)-1))
array_insert(_affectedPackets, array_length(_affectedPackets), instance_find(obj_packet, abs(_packetNum)-1))
// 因为数据包不从0开始,instance_find查找的是数据包编号减1的索引
})
} catch(error){
// 这里尝试了catch,因为我觉得空数组会导致array_foreach报错
// 旧代码正在使用,需要被替换
_affectedPackets = obj_packet
}
array_insert(obj_rules_lawyer.level_rules, array_length(obj_rules_lawyer.level_rules),
{
ruleName : _ruleName,
affectedPacketNumbers : _affectedPacketNumbers,
affectedPackets : _affectedPackets,
// 判断该特定规则是否被违反的布尔值
ruleFulfilled : true
})
}
之后这段代码执行完,每个与数据包对象相关的规则将使用:
with(obj_rules_lawyer.level_rules[forLoopIndex].affectedPackets) 来获取受此规则影响的数据包的ID。
现在我不知道把所有with语句重写成其他形式是否更好,但如果能用一个with语句来处理所有数据包或选定的数据包集合,那将会非常有帮助。:)
评论 (0)