0

首先:感谢支持!

我的问题:我想简单地测试是否定义了“枚举”属性。

假设我有:

  • 具有 2 个值 VALEUR1 和 VALEUR 的 EnumValues 枚举
  • 具有可选属性值的 EObject 对象

由于这个表达式,我本来希望测试值的存在:

object.value.oclIsUndefined()

但是这个表达式总是返回 true,因为 value 属性似乎是用枚举的第一个值初始化的。我发现的唯一绕过方法是不将 EnumValues 声明为 Enum,而是声明为 EObject。然后 oclIsUndefined() 方法在模型中没有设置属性时返回 false。顺便说一句,我的模型是由 Xtext 生成的。

这似乎是一个愚蠢的问题,但我无法在 Google、OCL 规范或 Acceleo 资源中找到答案。

我在这里找到的唯一材料说,实现这一目标的唯一方法是使用 isUndefined 或更通用的 isUndefined('value') OCL 辅助方法。但我无法在 Acceleo 环境中拒绝这一点。

你有什么主意吗 ?

提前感谢您的回复!

斯蒂芬妮

4

2 回答 2

0

我会做以下事情:

  • 在 Xtext 中使用手动维护的元模型
  • 但不要向 EEnum 添加虚拟文字
  • 更清洁的解决方案是恕我直言,将包含 Enum 值的 EAttribute 声明为不可设置,因此 EMF 会告诉您该值是显式设置还是默认值。
于 2012-05-08T19:54:33.777 回答
0

在 EMF 中,枚举有一个默认值(默认情况下,您的枚举的第一个枚举文字),如果您真的想创建一个具有默认值的枚举,请使用this。请记住,这不是 EMF 中枚举的“常规”行为。

Acceleo 只是向您报告 EMF 告诉您的内容:“您的枚举具有价值”。

您可以使用以下表达式在 Acceleo 中测试您的枚举:

[myObject.myEnumValue = MyEnum::MyEnumLiteral/]

正如wiki中所解释的那样。

问候,

Stephane Begaudeau,Acceleo 的领导者

于 2012-05-04T09:15:15.320 回答