在Alloy模型中使用boolean的最佳实践

时间:2013-09-11 22:06:35

标签: alloy

我正在构建一个简单的Alloy来生成简单的Java Pojo对象,并且该pojo的某些字段是布尔值。我现在正在使用以下机制来实现此功能

one sig item {
    autoPay: String,
    Price: Int
}

fact boolean {
    all n: item {
        item.autoPay = "true" or
        item.autoPay = "false"
    } 
}

这会有效,但每次我引入一个新的布尔字段时,我必须修改布尔事实,以确保该值为“true”或“false”。有没有最好的做法呢?就像我们Alloy为Integers做的那样?

1 个答案:

答案 0 :(得分:7)

引入Bool sig会更好,然后将它用于所有布尔字段,例如

abstract sig Bool{}
one sig True extends Bool
one sig False extends Bool

one sig item {
  autoPay: Bool,
  Price: Int
}

在这种情况下不需要其他事实。

如果你喜欢这种方法,有一个内置的“util / boolean”库,它定义BoolTrueFalse sigs,就像我上面那样,另外提供了一些辅助函数(如isTrueAndOr等),所以你可以简单地说

open util/boolean 

one sig item {
  autoPay: Bool,
  Price: Int
}