2014-01-17 38 views
1

存在的EReference我有兩個的eclass(打電話給他們的X和Y)在我的元模型和遏制(X含有Y)它們之間的關係,其下限爲0,上限爲1。檢查的實例(Acceleo)

我需要在我.mtl文件,以瞭解用戶是否以添加一些代碼加入的Y這隻實例。 嘗試次數這樣的失敗:

[if (X.relationname.oclIsUndefined() = false)] 
[if (X.relationname <> null)] 

在此先感謝,讓我知道如果你需要任何額外的信息。

回答

0

SOLUTION:

我終於被解決:

[if((X.relationname.attributename->size()).oclIsUndefined() <> true)] 

這是不是最好的解決方案,但它的伎倆。該屬性是一個EString。

1

這將取決於你的包含關係;無論是多值(它的「上界」設置爲「-1」,即只要你想它可以容納多達Y)或monovalued(它的「上界」爲「1」或不變,就只能有一個Y)。

如果多值,參考永遠不會是「空」(或「oclIsUndefined」)。當它不持單Y,這將是一個空列表,因此你需要檢查的大小:

[if (not X.relationname.isEmpty())] 

否則,monovalued引用,您可以檢查null(你在做什麼你答案似乎表明,它是這樣的,你在這裏):

[if (not X.relationname.oclIsUndefined())] 

相反,你已經在你的答案做的是有點不同:

[if((X.relationname.attributename->size()).oclIsUndefined() <> true)] 

釷是否會實際檢索與您的X關聯的Y並訪問其屬性值。如果沒有「Y」,這將不是null:它將是「無效的」,即它將失敗。當然,「oclInvalid」(以下簡稱「失敗」對象)是從「真」,讓你的「<>」作品不同......即使是笨重的(你通常用「不」的操作,而不是測試反對布爾值)。