在同一let表达式中,定义的变量能否在return前的其他变量定义中使用?
XPath/XQuery中let表达式的变量引用规则
明确说:同一个let表达式里,后面定义的变量完全可以直接用前面已经定义好的变量,你第一种写法完全合法,根本没必要多套一层let。
就像你写的这段代码:
let $a := //abc, $x := $a/xyz return $x
在let子句里,变量是按从上到下的顺序依次绑定的,$a先被求值并绑定,后面的$x直接用$a完全没问题,符合XPath/XQuery的规范。
至于第二种嵌套let的写法:
let $a := //abc return let $x := $a/xyz return $x
虽然能正常运行,但纯属多此一举,除非你要在中间加入别的逻辑(比如条件判断、循环),否则第一种写法更简洁高效。
另外你提到的//表达式的处理顺序,和let的变量绑定是两码事——//是用来选择节点的路径语法,let的变量绑定顺序是严格按定义顺序来的,二者互相不影响,不用担心引用出问题。
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

