假设我在合金 4.2 中有以下签名声明:
sig Target {}
abstract sig A {
parent: lone A,
r: some Target
}
sig B extends A {}
sig C extends A {}
运行时,生成的实例将具有从 everyB
到 someTarget
和 fromC
到 some的箭头Target
。
我怎么能只隐藏箭头B
?
起初,我尝试了以下方法:
abstract sig A {
parent: lone A
}
sig B extends A {
r: some Target
}
sig C extends A {
r: some Target
}
这将使我能够控制r
in B
,但是在编写属性时会引入很多歧义。我想让这些尽可能简单。例如:
all a: A | a.r = parent.a.r
上面说a
'sTargets
是a
'children's的集合Targets
。
对于后面的声明,我将不得不将其重写为
all b: B | b.r = parent.b.((B <: r) + (C <: r))
all c: C | c.r = parent.c.((B <: r) + (C <: r))
这是不可取的。
是否有任何解决方法可以拥有一个通用字段,但仍然可以控制显示的箭头?