Ich habe gerade angefangen, F # zu lernen (mit wenig Erfahrung mit .NET). Verzeihen Sie mir also die wahrscheinlich sehr einfache Frage: Was ist der Unterschied zwischen einem Namespace und einem Modul in F #?
Vielen Dank
Dave
Edit: Danke für die Antwort Brian. Das wollte ich wissen. Nur eine Klarstellung: Können Sie auch einen Namespace öffnen (ähnlich wie bei C # using-Anweisung)?
f#
module
namespaces
Dave Berk
quelle
quelle
Antworten:
Ein Namespace ist eine .NET-Sache, die in vielen industriellen Sprachen üblich ist. Sie dient lediglich dazu, Frameworks zu organisieren und Namenskonflikte zwischen verschiedenen Bibliotheken zu vermeiden. Sowohl Sie als auch ich können einen Typ "Foo" definieren und beide in einem Projekt verwenden, sofern sie sich in unterschiedlichen Namespaces befinden (z. B. NS1.Foo und NS2.Foo). Namespaces in .Net enthalten Typen.
Ein Modul ist ein F # -Ding, es ist ungefähr analog zu einer "statischen Klasse" ... es ist eine Entität, die let-gebundene Werte und Funktionen sowie Typen enthalten kann (beachten Sie, dass Namespaces Werte / Funktionen, Namespaces nicht direkt enthalten können kann nur Typen enthalten, die selbst Werte und Funktionen enthalten können). Dinge innerhalb eines Moduls können über "ModuleName.Thing" referenziert werden. Dies ist die gleiche Syntax wie für Namespaces. Module in F # können jedoch auch "geöffnet" werden, um einen uneingeschränkten Zugriff zu ermöglichen, z
(BEARBEITEN: Namespaces können ebenfalls auf ähnliche Weise geöffnet werden. Die Tatsache, dass Module Werte und Funktionen enthalten können, macht das Öffnen eines Moduls jedoch interessanter, da Sie Werte und Funktionen, z. B. "cos", als Namen verwenden können direkt, während Sie es in anderen .NET-Sprachen normalerweise immer qualifizieren müssen, z. B. "Math.cos").
Wenn Sie in F # Code auf der obersten Ebene eingeben, wird dieser Code implizit in ein Modul eingefügt.
Hoffe das hilft etwas, es ist eine ziemlich offene Frage. :) :)
quelle