Akkumuliert einen laufenden Wert durch Auswertung von expression.
intoInject(Block expession,Object startValue) | |||
---|---|---|---|
Argumente | Block | expression | Ausdruck der auf jedes Objekt der Collection angewendet werden soll. |
Object | startValue | Startwert mit dem die Akkumulation begonnen werden soll. | |
Rückgabewert | Object | Ergebnis der Akkumulation |
Formel | Ergebnis |
---|---|
=List{ 10, 11, 12}.intoInject(indexValue,startValue | indexValue + startValue,0) | 33 |
=List{'String1','String2','String3'}.intoInject(indexValue,startValue | startValue.append(Pair{indexValue,indexValue + '_Value'}),List{}) | [String1»String1_Value,String2»String2_Value,String3»String3_Value] |
Beschreibung für das Beispiel 1:
Angaben in diesem Beispiel
- List{10,11,12} = Liste von Objekten, über die mit intoInject iteriert wird
- indexValue = Laufvariable
- startValue = Variable für den Zwischenwert
- indexValue + startValue = Anweisung (jede EEC-Formel ist möglich)
- 0 = Startwert für startValue
Laufnummer der Iteration | Laufvariable indexValue | Zwischenwert startValue | Ergebniswert für indexValue + startValue |
---|---|---|---|
1 | 10 | 0 | 10 |
2 | 11 | 10 | 21 |
3 | 12 | 11 | 33 |
intoInject wird in der Praxis z.B. dazu verwendet, Maps anzulegen, deren Schlüssel-Wert-Paare als Werte Listen enthalten.
Das folgende Beispiel zeigt, wie Signalnamen in einem Projekt gesammelt und in einer Map nach Signaltyp sortiert werden.
Die folgenden Signaltypen können im Modell vorkommen:
- AbsSignal.AbsAktor.AO
- AbsSignal.AbsAktor.DO
- AbsSignal.AbsSensor.AI
- AbsSignal.AbsSensor.DI
Die folgende Formel sammelt die Signalnamen des gesamten Modells:
=rmos('ModularSystem.Controller.Signals.AbsSignal').intoInject(signal,map| // check if signal is already in map
if map.containsKey(signal.SignalType)then // if yes, then add the signal to the list
map.add(signal.$SignalType,map.value(signal.$SignalType).append(signal))
else // if not, then add the signal to the map (creates new list)
map.add(signal.$SignalType,List{signal})
endif
,Map{})
Das Ergebnis hat in diesem Beispiel folgendes Aussehen:
[DO»[<<DO>>,<<DO>>],AI»[<<AI>>],DI»[<<DI_1>>,<<DI_2>>,<<DI>>]]
Es wurde eine Map mit drei Schlüssel-Wert-Paaren gebildet, bei denen der Schlüssel immer der Signaltyp und der Wert immer eine Liste von Signalen des Signaltyps ist.