1
我試圖習慣f#查詢表達式。如何使f#查詢表達式可重用?
首先,他們肯定渴望,這是因爲:
let arr = [1; 2; 3]
let q = query { for item in arr do select item; count };;
val arr : int list = [1; 2; 3]
val q : int = 3
我想重用的查詢,所以我儘量懶計算:
let arr = ref [1; 2; 3]
let q = lazy query { for item in !arr do select item; count }
q.Value;;
val arr : int list ref = {contents = [1; 2; 3];}
val q : Lazy<int> = 3
val it : int = 3
現在,我要重新evalute查詢:
arr := [1; 2; 3; 4]
q.Force();;
val it : int = 3
所以,什麼也沒有發生,它不會重新計算。我如何多次使用查詢而不重新定義它?
評估後'懶惰'緩存值。 –
對我來說有點奇怪的是,沒有工具來重新評估表達式 – Rustam
有一種工具,它被稱爲函數,正如@Tomas Petricek的回答中所提到的。函數可以被視爲參數化表達式。 –