Что эквивалентно переменной уровня блока в mulesoft? - PullRequest
0 голосов
/ 07 июня 2019
public static void method_one(){
    for(Integer i=0;i<10; i++){
        System.out.println('i');
    }
    //If we try to reference variable 'i', it will throw error.
}

Я пытаюсь реализовать вышеуказанную логику в mulesoft 4 и запутался, если у нас есть эквивалент переменной уровня блока в mulesoft?

Может кто-нибудь предложить.

1 Ответ

1 голос
/ 08 июня 2019

Не совсем сравнимо в потоках мулов. В муле 4 потоки vars являются переменными потока (так же, как flowVars в муле3). Они относятся к событию и доступны для потока, который они определяют, и для любых потоков / подпотоков, на которые они ссылаются. Они не пересекают «транспортные барьеры», поэтому они не будут доступны в другом потоке, если они переходят через http, vm, jms или любой другой транспорт, который вы используете для соединения своих потоков.

Даже в области действия foreach, если переменная установлена, она все еще доступна в следующей итерации. Однако каждая итерация foreach будет перезаписывать переменную. И после foreach только последнее оцененное значение доступно вне области foreach:

<foreach collection="#[[0,1,2,3]]">
    <set-variable variableName="i" value="#[(vars.i default 0) +1]" />
    <!-- logs 1 then 2 then 3 then 4 -->
    <logger level="INFO" message="Value of i: #[vars.i]" />
</foreach>

<!-- logs 4  -->
<logger level="INFO" message="Value of i: #[vars.i]" />

Вы можете использовать <remove-variable variableName="myVar" />, если вам необходимо удалить его по какой-либо причине.

Если вы говорите о Dataweave, то оператор using позволяет использовать переменную в области видимости:

%dw 2.0
output application/java
var myarray=[0,1,2,3]
---
{
    bla: myarray map using (i=$$) { 
        index: i //works
    },
    outofscope: i //wont work
}
...