我正在尝试习惯使用 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
现在,我想重新评估查询:
arr := [1; 2; 3; 4]
q.Force();;
val it : int = 3
所以,什么也没发生,它不会重新计算。如何在不重新定义的情况下多次使用查询?