在MDriven中处理时间报告项目,我创建了一个员工工作了十个小时的实例。员工类"属性.type"是" timespan" for" HoursWorked"。
action:
Employee.create
Employee.allinstances->at0(0) .HoursWorked:= 10:00:00
此代码给出了语法错误。 at0是否在" timepan"?如果是这样,在这种情况下应该使用哪个表达式来创建特定的时间跨度?
此外,如果有人知道一个包含所有OCL表达式的好的,信息丰富的wiki,以及如何正确编写会被大大提高的语法。
答案 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的答案可能不相关。