declare variable Š is lazily evaluated, which is great unless you never
access the variable but expect it to cause a side-effect.


On 19/06/2014 16:28, "Retter, Adam (RBI-UK)" <[email protected]> wrote:

>Given a main module with no user defined functions, is it considered
>better practice to use `declare variable` as opposed to `let`, the reason
>I ask is twofold:
>
>1) I have started on a large code-base that seems to eschew `let` in
>favour of using `declare variable`. This seems somewhat strange to me.
>
>2) We have seen different evaluation strategies, whereby a function which
>returns an empty-sequence which is bound in a declare variable clause, is
>never executed. Yet when we re-write that as a let binding, the code is
>executed. I think perhaps the query optimiser in ML is being too
>aggressive here?
>
>
>For example -
>
>declare variable $content-type as xs:string :=
>slib:validated-bulk-load-content-type();
>
>and then a few lines later we have -
>
>slib:normal-bulk-load-response ($etag-map, fn:count
>($etag-map/store:etag-entry), $content-type)
>
>Subsequently the `slib:normal-bulk-load-response` calls
>xdmp:set-response-content-type($content-type). However the
>`slib:validated-bulk-content-type()` function is never evaluated, we are
>certain of this because it eventually calls `fn:error`, yet the error
>never occurs!
>
>If we switch the `declare variable $content-type` for a `let
>$content-type` then we do see the error occurring!
>
>Cheers Adam.
>
>DISCLAIMER
>This message is intended only for the use of the person(s) ("Intended
>Recipient") to whom it is addressed. It may contain information, which is
>privileged and confidential. Accordingly any dissemination, distribution,
>copying or other use of this message or any of its content by any person
>other than the Intended Recipient may constitute a breach of civil or
>criminal law and is strictly prohibited. If you are not the Intended
>Recipient, please contact the sender as soon as possible.
>Reed Business Information Limited. Registered Office: Quadrant House, The
>Quadrant, Sutton, Surrey, SM2 5AS, UK.
>Registered in England under Company No. 151537
>
>_______________________________________________
>General mailing list
>[email protected]
>http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to