我创建了一个结构列表,我喜欢将每个结构中满足特定条件的字段的值相加。 例如:
struct packet {
val:int;
cond:bool;
};
l:list of packet;
当我写下以下内容时:
keep l.all(it.cond).sum(it.val) == 1000;
I get an error: GEN_NO_GENERATABLE_NOTIF.
当我定义结果变量时:
sum_val : int;
keep sum_val == 100;
并将约束更改为: 保持l.all(it.cond).sum(it.val)== sum_val;
我感到矛盾!
如何让它发挥作用?
答案 0 :(得分:3)
您应该使用list伪方法“sum”和三元操作:
keep l.sum(it.cond ? It.val : 0) == 1000
答案 1 :(得分:0)
从问题看来,您似乎想要对现有列表中的某些元素求和,而不是生成新元素。在这种情况下,使用简单: var sum:int = l.all(it.cond).sum(it.val);