我有一個XQuery庫模塊,其中包含一些不帶參數的函數。 我正在考慮重寫這些函數作爲變量,使它更快訪問它們。XQuery:是否對導入的變量進行了懶惰評估?
但是,其中一些內容是計算昂貴的表達式。作爲函數,它們顯然只在被調用時才被評估。但作爲變量,我不確定在庫模塊導入時是否會自動評估它們。
只有一些導入此模塊的查詢會使用這些變量,並證明其評估正確。對於其他不使用變量的人來說,評估將是不必要的開銷。 ,
將不會有任何問題,但是如果是進口變量懶洋洋地評價:我可以導入庫模塊上的任何查詢,知道只有當實際主模塊使用這些昂貴的變量進行評估。
我知道這只是寫作prefix:myImportedFunction()
與$prefix:myImportedVariable
有關,但這是我想消除的不確定性。
我相信這種行爲是依賴於實現的。我對BaseX和Saxon-HE的行爲特別感興趣。他們懶洋洋地評估導入的變量嗎?
還沒有收到有關的'lazy'註釋想法。偉大的提示;並感謝分享它。除此之外,我只想仔細檢查你提到的兩個關鍵詞:「執行代碼」。如果在_library module_中的另一個變量中引用昂貴的變量,而在_main module_中不引用,則$ expensive將不會被預先評估,因爲它不是已執行代碼的一部分。對? – ARX
如果變量發生在主模塊或庫模塊中,它實際上並不重要。但是,如果變量在代碼中的某個地方被引用,它可以起到一定的作用。如果它出現在一個永遠不會被調用的函數中,它將不會被真正評估。 - 這有幫助嗎? –
它的確如此!謝謝。 – ARX