module p1=
let rec fn n acc = ...
let result = fn 999 0
从同一名称空间下的其他模块调用它。 fn返回acc,即int。
这适用于任何一种情况......
let fnMatchProblem = function
| 0 -> "Good bye."
| 1 -> (p1.fn 999 0).ToString()
但是在这里,我无法弄清楚为什么后一种情况(1)没有......控制权会回到它挂起的控制台。
let fnMatchProblem = function
| 0 -> "Good bye."
| 1 -> p1.result.ToString()
或
let fnMatchProblem = function
| 0 -> "Good bye."
| 1 -> (p1.result).ToString()
出于其他目的,我宁愿让p1始终返回一个int。 p1.result的原因是具有预定义的输入。
编辑1: 我把它缩小了。 这种格式有20个模块......
module p<n>=
let function param = ...
let result = function param
无论调用哪个模块,都会执行所有模块。因此,应用程序没有挂起,但需要很长时间才能执行所有模块。但奇怪的是,返回的结果来自实际选择执行的模块。
编辑2 ......决议......感谢Vandroiy:
let fnMatchProblem = function
| 0 -> "Good bye."
| 1 -> p1.result()
module p1=
let rec fn n acc = ...
let result () = fn 999 0 |> string
答案 0 :(得分:2)
无法保证最终节目不需要计算的值。在模块中公开昂贵计算结果的常规方法是函数和惰性值。
功能:
module p =
// ...
let calculateResult () = fn 999 0
懒:
module myModule =
// ...
let result = lazy (fn 999 0)
通过在它们上面调用.Force()
来访问延迟计算的结果。它们确保昂贵的计算仅运行一次且仅在需要时运行。另见:Lazy computations in F#。