16.9.3 语义

Variable Action

VariableAction操作一个静态指定的Variable。该Variable必须是由包含VariableAction的一个Activity(参见15.2)或一个StructuredActivityNode(参见16.11)所定义的。

Read Variable Actions

ReadVariableAction读取一个Variable的值并将其置于result OutputPin。如果Variable是有序的,那么放置在result OutputPin的值也是有序的。如果没有读到值(即Variable为空),那么在result OutputPin上产生一个空token。

result OutputPin的类型和次序与Variable是相同的。Variable的multiplicity必须与result OutputPin的相兼容,但不必相同。举个例子,建模者可以设置OutputPin的multiplicity以支持多值,即使Variable只允许一个单值(这样,ReadVariableAction就不会由于Variable的multiplicity的改变而受到影响)。

Add Variable Value Acton

AddVariableValueAction向Variable添加一个值。要添加的值通过value InputPin给定,它是必须的。InputPin与Variable具有相同的类型且multiplicity为1..1(即要添加一个单值)。

如果isReplaceAll为真,那么在新值被添加之前Variable的现有值将被移除,除非Variable已经包含了新值,此种情形下,该值不会被移除。在Action执行后,Variable总是具有一个单值,即使它的multiplicity下限要求大于1。如果isReplaceAll为假,Variable无序且唯一,那么添加一个早已包含在Variable中的值没有效果。

向有序的Variable添加一个值需要使用insertAt InputPin来指定一个插入点,这对于isReplaceAll为假时的有序Variable是必须的,对于无序Variable则省略(即使multiplicity的上限是1,Variable的值也能是有序或无序的)。如果提供了insertAt InputPin,它的类型是UnlimitedNatural且multiplicity为1..1。小于或等于当前值数目的正整数插入点给定了在序列中要插入的位置,整数1表示序列的第一个元素。值“*”表示序列的末尾。对于值为0或大于现有值数目的整数,语义是未定义的。向有序的、唯一的Variable中再插入一个已有的值相当于将其移动到指定的位置。当isReplaceAll=true时,插入点被忽略。

如果添加一个值将导致违反Variable的multiplicity上限,那么该语义是未定义。

Remove Variable Value Actions

RemoveVariableValueAction从Variable移除一个值。

要移除的值通过value InputPin给定,它与Variable具有相同的类型且multiplicity为1..1。即使结果会违反Variable的multiplicity下限,值也要被移除。移除一个Variable中不存在的值对Variable没有效果。isRemoveDuplicates选项指示是否移除非唯一Variables中出现的所有给定值。

如果isRemoveDuplicates为假,Variable有序且非唯一,那么不会给定value InputPin,而是通过removeAt InputPin指定要移除的值位置,它的类型是Unlimitednatrual且multiplicity为1..1。对于小于或等于当前值数目的正整数指明了要移除值在序列中的位置,整数1表示序列中的第一个值。0、大于当前值数目的整数,以及“*”,语义都是未定义。

Clear Variable Actions

ClearVariableAction移除一个Varible的所有值,即使ariable的multiplicity下限要求大于0。如果Variable没有值,那么action没有效果。

results matching ""

    No results matching ""