gpt4 book ai didi

scope - Mule 表达式变量作用域

转载 作者:行者123 更新时间:2023-12-04 23:50:33 25 4
gpt4 key购买 nike

Mule 表达式组件中变量的范围是什么,它与流变量有什么关系?我有一个 set-variable 的流量并惊讶地发现该值被 expression-component 中的赋值覆盖了.例如,

<flow name="HelloWorldFlow1" doc:name="HelloWorldFlow1">
<http:inbound-endpoint exchange-pattern="request-response"
host="localhost" port="9999" doc:name="HTTP"
doc:description="This endpoint receives an HTTP message." path="helloworld"/>
<set-variable variableName="asdf" value="firstvalue" doc:name="Variable"/>
<logger message="#[flowVars[&quot;asdf&quot;]]" level="INFO" doc:name="Logger"/>
<expression-component doc:name="Expression"><![CDATA[asdf = "secondvalue";]]></expression-component>
<logger message="#[flowVars[&quot;asdf&quot;]]" level="INFO" doc:name="Logger"/>

<expression-component doc:name="Expression"><![CDATA[qwer = "thirdvalue";]]></expression-component>
<logger message="#[flowVars[&quot;qwer&quot;]]" level="INFO" doc:name="Logger"/>
</flow>

这个的输出是:
INFO  2014-04-25 08:58:46,889 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: firstvalue
INFO 2014-04-25 08:58:46,893 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: secondvalue
INFO 2014-04-25 08:58:46,895 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: null

如果可能,您能否指出范围规则的文档?我尝试了一些不同的搜索并不断得到无关的结果。

澄清:expression-component , Mule 是否首先检查是否存在具有给定名称的流变量,然后使用该变量而不是创建一个新变量?如果表达式组件创建了一个变量,范围是否仅限于表达式组件代码?在 http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/ ,它说 Mule 流变量“表现得像实例属性”,但我找不到实例属性的定义。单词 scope 也不在表达式组件引用页面 ( http://www.mulesoft.org/documentation/display/current/Expression+Component+Reference ) 中。

最佳答案

<set-variable你正在创建一个流变量。其范围在flow内它被声明,还有 sub-flowsprivate flow被这个流调用。把它想象成一个实例变量。

此外,您的流程中有 4 个记录器语句,而您只显示 3 个日志语句的输出。如果您修改 log 语句以包含您正在打印的值,那么尝试找出该 print 语句用于哪个变量就不会那么困惑了,例如:

<logger message="Value of asdf is: #[flowVars['asdf']]" level="INFO" doc:name="Logger"/>

而且你不需要包围 &quot;围绕你的变量名。其他速记符号只是说
<logger message="Value of asdf is: #[asdf]" level="INFO" doc:name="Logger"/>

有关范围的更广泛引用,请参见: http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/

当您覆盖流中的变量值时,初始值将被下一个赋值覆盖,就像 java 中的变量值赋值函数一样。

编辑:

你是对的,由 <set-variable> 创建的变量可以用表达式组件重新赋值,但在内部创建的变量 <expression-component>在那个街区之外没有范围。抱歉,我没有可备份的链接,这是基于我的实验。

关于scope - Mule 表达式变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com