【发布时间】:2019-04-17 15:32:51
【问题描述】:
我发现自己经常遇到以下情况:
sig Property {}
abstract sig Unit {
property: some Property
}
sig Hardware, Software, Services extends Unit {}
fact {
no Hardware.property & Software.property
no Hardware.property & Services.property
no Software.property & Services.property
}
也就是说,我有一个声明属性的抽象签名,以及一些扩展该签名的子类型。我想确保子类型之间的属性property 没有重叠。
将允许Hardware 的两个实例共享property 值,但绝不允许Hardware 和Software 实例具有公共属性。
我真的不想像那样写fact。如果我添加第四种Unit,我很容易搞砸事实。
这感觉就像我需要能够自省类型,但我不知道有什么工具可以做到这一点。
有什么建议吗?
【问题讨论】:
标签: alloy