行为可能与转换相关联,这就是效果。我记得读过一个效果和一个后卫应该没有副作用而且没有任何重复。
但是阅读标准的2.5版本,我再也找不到了。
我错了吗?如果不是,如果在效果期间发生异常会发生什么?解决方案可能是根据效果的结果来定义防护,但是可能吗?事实上我从来没有这样做过。
答案 0 :(得分:1)
页。 358:
♦guard:Constraint [0..1] {subsets Namespace :: ownedRule}(与A_guard_transition :: transition相反) 守卫是一种约束,可以对过渡的射击提供细粒度的控制。在StateMachine调度Event事件时评估防护。如果此时保护为真,则可以启用转换,否则禁用转换。卫兵应该是没有副作用的纯粹表达。带有副作用的警卫表达形成不良。
页。 375:
由于在向目标节点提供令牌时使用了转换或选择行为,因此在目标节点接受令牌之前,它可能会在同一令牌上运行多次。这意味着行为不会产生副作用。它不应修改对象,但转换可以是,例如,从一个对象导航到另一个对象,从对象获取属性值,或用另一个对象替换数据值。
您应该阅读14.2.3.9.1 The run-to-completion paradigm
部分,其中详细说明了转换是如何发生的。在(非常)短路中,如果在转换的行为执行期间发生异常,则不进行此转换。