5

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

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

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

这会起作用,但是每次我引入一个新的布尔字段时,我都必须修改布尔事实以确保该值是“真”或“假”。有没有最佳实践来做到这一点?就像我们 Alloy 对整数所做的那样?

4

1 回答 1

8

最好引入一个 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,TrueFalsesigs 就像我在上面所做的一样,另外还提供了一些辅助函数(如isTrue, And,Or等)所以你可以简单地说

open util/boolean 

one sig item {
  autoPay: Bool,
  Price: Int
}    
于 2013-09-12T13:44:53.723 回答