首先:感谢您的支持!
我的问题:我想简单地测试是否定义了“枚举”属性。
让我说我有:
我希望通过这个表达式测试值的存在:
object.value.oclIsUndefined()
但是这个表达式总是返回true,因为value属性似乎是用枚举的第一个值初始化的。我发现的唯一旁路方法是不将EnumValues声明为枚举,而是将其声明为EObject。然后,当未在模型中设置属性时,oclIsUndefined()方法返回false。顺便说一句,我的模型是由Xtext生成的。
这似乎是一个愚蠢的问题,但我无法在Google,OCL规范或Acceleo资源中找到答案。
我发现的唯一材料here表示,实现此目的的唯一方法是使用isUndefined或更通用的isUndefined('value')OCL辅助方法。但我无法在Acceleo环境中拒绝这一点。
你有什么想法吗?
预先感谢您的回复!
斯特凡
答案 0 :(得分:0)
在EMF中,Enumerations有一个默认值(默认情况下,枚举的第一个枚举文字),如果你真的想要创建一个默认值的枚举,请使用this。请记住,这不是EMF中枚举的“常规”行为。
Acceleo只是报告你EMF告诉你的内容:“你的枚举有一个值”。
您可以使用以下表达式在Acceleo中测试您的枚举:
[myObject.myEnumValue = MyEnum::MyEnumLiteral/]
如wiki中所述。
此致
Acceleo的领导人Stephane Begaudeau
答案 1 :(得分:0)
我会做以下事情: