我正在构建一个简单的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做的那样?
答案 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”库,它定义Bool
,True
和False
sigs,就像我上面那样,另外提供了一些辅助函数(如isTrue
,And
,Or
等),所以你可以简单地说
open util/boolean
one sig item {
autoPay: Bool,
Price: Int
}