F# - namespaces, Module, fs und fsx
Ich bin mir dessen bewusst, andere Fragen über Module und namespaces in F#, aber Sie sind nicht zu helfen, mich jetzt.
Ich habe ein Projekt mit
Utilities.fs
namespace Company.Project.Namespace
module Utilities =
//stuff here
Funktionen.fs
namespace Company.Project.Namespace
open Utilities
module Functions =
//stuff here
Und ich versuche, um Sie zu testen im fsx:
#load "Utilities.fs"
#load "Functions.fs"
gibt mir error FS0039: The namespace or module 'Utilities' is not defined
wenn ich versuche zu senden FSI mit Alt-Enter
.
Ich habe versucht, hinzufügen von gleichen namespace am Anfang der script-Datei, aber es funktioniert nicht so.
Was ist komisch ist, dass der hintergrund-compiler nicht Schreien mich an.
Diese scheint zu funktionieren, aber ist das der richtige Ansatz weiter?
#load "Utilities.fs"
open Company.Project.Namespace
#load "Functions.fs"
Gibt es eine "Referenz" FSharp-Projekt irgendwo, die enthält Beispiele dafür, wie die Integration aller dieser Sachen: namespaces, Module, Klassen -, Skript-Dateien, tests, etc.?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin kein Experte bei der FSI, aber einige Experimente deutet darauf hin, dass namespaces sind nur unterstützt von
#load
Erklärungen (nicht über typische Interaktionen - senden einer namespace-Deklaration Gruppe VFSI über Alt-Enter funktioniert nicht), und dass verschiedene Wechselwirkungen beitragen, verschiedene 'Instanzen'. Zum Beispiel, mit der code-Dateiwenn ich
#load
es mehr als einmal bekomme ich z.B.Beachten Sie, dass es scheint, die FSI_0003.Foo.Bar schaukelnd FSI_0002 version.
Also ich denke, das Teil des F# - spec sagt
Interagiert nicht mit FSI, gegeben FSI eingeschränkten Verständnis von namespaces. Insbesondere erwarte ich, dass die "zweite" #load' aus deinem Beispiel, öffnet sich z.B.
FSI_000N+1
's version der Namensraum, in der Erwägung, dass der Vorherige code war inFSI_000N
. Was vielleicht erklärt, warum die expliziteopen
Interaktion behebt Sie; Sie bringen die vorhandenen, unshadowedFSI_000N
Zeug auf top-Niveau, bevor Sie versuchen, Sie (implizit) verweisen später.Ich bin relativ neu in diesem, auch, aber das ist was für mich funktioniert, wenn ich die Prüfung in einer fsx-Datei:
gefolgt von meinem code, der verwendet diese Bibliotheken.