Dot-Net

F# 中模組和命名空間之間的區別

  • December 10, 2021

我在理解 F# 中的模組和命名空間之間的確切區別以及使用其中一個或另一個時遇到了問題。好吧,它們都被考慮以封裝程式碼並定義層次結構以使我們的項目井井有條。

模組有很多特性:它們可以包含值、各種類型,並且這些元素可以被定義publicprotected或者internal也可以。

但是,當使用模組時?

我還了解到模組最終被映射為 MSIL(中間語言)中的類。所以一個模組是一個類,是一個類型……我的疑慮的幅度有所提高……

使用模組時???它們有用嗎?

D. Syme 還認為模組是可擴展的,所以我認為從這個角度來看它們就像命名空間。

我無法理解使用它們的原因。

謝謝

一大區別:

.NET 命名空間不能保存(let 定義),而模組可以。

在 IL/字節碼級別,模組被編譯為 .NET 類,而不是 .NET 命名空間。

什麼時候使用模組?

對於小而具體的任務,F# 和其他 FP 通常遵循自下而上程式的模式:您將任務分解為一組小函式,然後將這些函式分組為一個模組。

答案是使用模組將一組相關函式和其他 F# 值和類型組合在一起是很自然的。

而命名空間用於對更大的事物進行分組:例如矩陣操作的所有類。

模組不是靜態類(在 C# 意義上) 模組可以保存特殊的 F# 值,例如 curried 函式;而靜態類不能。

引用自:https://stackoverflow.com/questions/4977414