OCL at0运算符语法错误

时间:2018-02-10 15:54:22

标签: ocl

在MDriven中处理时间报告项目,我创建了一个员工工作了十个小时的实例。员工类"属性.type"是" timespan" for" HoursWorked"。

action:
Employee.create
Employee.allinstances->at0(0) .HoursWorked:= 10:00:00

此代码给出了语法错误。 at0是否在" timepan"?如果是这样,在这种情况下应该使用哪个表达式来创建特定的时间跨度?

此外,如果有人知道一个包含所有OCL表达式的好的,信息丰富的wiki,以及如何正确编写会被大大提高的语法。

2 个答案:

答案 0 :(得分:2)

问题是MDriven动作语言(基于OCL但允许副作用)要求您将语句与;

分开

尝试:

action:
Employee.create;  -- notice that semicolon
Employee.allinstances->at0(0).HoursWorked:= TimeSpan.Create(10,00,00)  --NO ; on end statement

答案 1 :(得分:1)

此问题的标题为OCL,因此以下答案适用:

OCL没有任何实例;它是allInstances()。

OCL中没有at0();它位于(),因为OCL是一个规范语言索引是从1开始的,所以0索引是无效的。

OGL表达式和库操作可在OMG规范或在线Eclipse帮助中找到:http://help.eclipse.org/oxygen/topic/org.eclipse.ocl.doc/help/StandardLibrary.html?cp=74_2

但是很明显,您实际上是在MDriven中使用非标准嵌入式OCL,因此适用于OCL的答案可能不相关。