OCL at0 运算符语法错误

OCL at0 operator syntax error

在 MDriven 中进行时间报告项目时,我创建了一个员工工作十小时的实例。员工 class 的 "attribute.type" 是 "timespan" 的 "HoursWorked"。

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

这段代码给我一个语法错误。 "timespan" at0 不工作吗?如果是这样,在这种情况下应该使用哪个表达式来创建特定的时间跨度?

此外,如果有人知道一个好的、信息丰富的 wiki,其中包含所有 OCL 表达式以及如何正确编写语法,那将非常受欢迎。

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

OCL中没有allinstances;它是 allInstances()。

OCL中没有at0();它是 at() 并且由于 OCL 是一种规范语言索引是基于 1 的,因此 0 索引是无效的。

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

但是很明显,您实际上使用的是 non-standard OCL,大概嵌入在 MDriven 中,因此适用于 OCL 的答案可能不相关。

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

分隔语句

尝试:

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