首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCL -呼叫规则

OCL -呼叫规则
EN

Stack Overflow用户
提问于 2017-01-21 15:45:50
回答 1查看 78关注 0票数 0

下面的代码是做什么的?当有一个元素而不是元素时,我如何编写这个OCL表达式?

换句话说,我不明白代码收集了哪些元素?由于当我们有多个元素时使用" collect“,如果我有一个元素(而不是元素),那么该表达式的"-> collect (s|thisModule.CreateMatchClass(s))”部分会发生什么变化呢?

代码语言:javascript
复制
s.source.elements -> collect (s|thisModule.CreateAnyMatchClass(s))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 08:10:04

OCL表达式只是从thismodule中的元素中“创建”元素(关于s.source函数的名称)。然后将创建的元素作为Collection返回。

  • s.source.elements通过从s导航返回(据说)一个Collection (可能是一个Set/Sequence...)
  • collect(...)收集其参数表达式的结果。

如果关系elements不再是0..*,而是0..11..1,如何更改表达式

实际上,collect(...)可以处理集合,但->也是Set的隐式转换器。OCL规范第15页规定:

"->“导航速记执行对象的隐式集转换。 anObject->union(aSet)anObject.oclAsSet()->union(aSet)的缩写

这意味着在这种情况下,element (我删除了最后的's')是一个“单一”关系,而s.source.element返回一个元素,调用s.source.element->...相当于s.source.element.oclAsSet()->...。在您的例子中,无论elements是多还是不多,表达式仍然是相同的:

代码语言:javascript
复制
s.source.elements -> collect (s|thisModule.CreateAnyMatchClass(s))

这个表达式在这两种情况下都是有效的。

如果你真的不想要collect,如果你的elements关系是单一的,你也可以这样写:

代码语言:javascript
复制
thisModule.createAnyMatchClass(s.source.elements)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41781254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档