2013-04-06 62 views
3

假設我有以下簽名的聲明,在合金4.2:隱藏字段的亞型合金

sig Target {} 

abstract sig A { 
    parent: lone A, 
    r: some Target 
} 

sig B extends A {} 
sig C extends A {} 

運行時,所產生的情況下,將不得不從各個B箭頭一些Target,並從C到一些Target

我怎樣才能隱藏B只有箭頭?
我嘗試以下,首先:

abstract sig A { 
    parent: lone A 
} 

sig B extends A { 
    r: some Target 
} 

sig C extends A { 
    r: some Target 
} 

這會給我控制rB,但是寫性能時,它引入了一個很大的模糊性。我想盡可能保持簡單。例如:以上

all a: A | a.r = parent.a.r 

aTargets是集a的兒童Targets
對於後者的聲明,我將不得不重寫這

all b: B | b.r = parent.b.((B <: r) + (C <: r)) 
all c: C | c.r = parent.c.((B <: r) + (C <: r)) 

這是不希望的。

是否有任何解決方法能夠有一個通用字段,但仍然可以控制顯示哪些箭頭?

回答

5

可以定義完全對應的函數(C <:R):以關係$ C_r

fun C_r : A -> Target { 
    (C <: r) 
} 

合金可視化工具,你更是預示了訪問。然後,您可以關閉關係r的「顯示爲弧線」,但仍然可以顯示$ C_r。這應該隱藏屬於(B <:r)的邊集。

+0

謝謝恩賢,回答了我的問題。我之前做過類似的事情,使用函數來處理關係的特殊情況(例如:在圖着色問題中着色原子),但由於某種原因,只有超載出現在我的腦海裏! – afsantos 2013-04-06 17:01:20