Interaktive Programmierung mit F#Interactive Programming with F#

Hinweis

Dieser Artikel beschreibt derzeit nur das Erlebnis für Windows.This article currently describes the experience for Windows only. Er wird neu geschrieben.It will be rewritten.

Hinweis

Mit dem API-Referenz-Link gelangen Sie auf MSDN.The API reference link will take you to MSDN. Die docs.microsoft.com-API-Referenz ist nicht abgeschlossen.The docs.microsoft.com API reference is not complete.

F# Interactive (fsi.exe) wird zum interaktiven Ausführen von F#-Code in der Konsole oder zum Ausführen von F#-Skripts verwendet.F# Interactive (fsi.exe) is used to run F# code interactively at the console, or to execute F# scripts. Dies bedeutet, dass F# Interactive eine REPL (Read, Evaluate, Print Loop = Lesen-Auswerten-Drucken-Schleife) für F# ausführt.In other words, F# interactive executes a REPL (Read, Evaluate, Print Loop) for the F# language.

Starten Sie "fsi.exe", um F# Interactive in der Konsole auszuführen.To run F# Interactive from the console, run fsi.exe. Sie findet fsi.exe in "c:\Programme\Microsoft Dateien (x86) \Microsoft SDKs\F#<Version > \Framework<Version >".You will find fsi.exe in "c:\Program Files (x86)\Microsoft SDKs\F#<version>\Framework<version>". Informationen zu verfügbaren Befehlszeilenoptionen finden Sie unter F# Interactive-Optionen.For information about command line options available, see F# Interactive Options.

Zum Ausführen von F# Interactive über Visual Studio können Sie auf die entsprechende Symbolleistenschaltfläche F# Interactive klicken oder die Tastenkombination Strg+Alt+F verwenden.To run F# Interactive through Visual Studio, you can click the appropriate toolbar button labeled F# Interactive, or use the keys Ctrl+Alt+F. Dadurch wird das Interactive-Fenster geöffnet, ein Toolfenster, in dem eine F# Interactive-Sitzung ausgeführt wird.Doing this will open the interactive window, a tool window running an F# Interactive session. Sie können auch Code auswählen, den Sie im Interactive-Fenster ausführen möchten, und die Tastenkombination ALT+EINGABE drücken.You can also select some code that you want to run in the interactive window and hit the key combination ALT+ENTER. F# Interactive wird in einem Toolfenster mit der Bezeichnung F# Interactive gestartet.F# Interactive starts in a tool window labeled F# Interactive. Wenn Sie diese Tastenkombination verwenden, überprüfen Sie, ob das Editorfenster den Fokus besitzt.When you use this key combination, make sure that the editor window has the focus.

Unabhängig davon, ob Sie die Konsole oder Visual Studio verwenden, wird eine Eingabeaufforderung angezeigt, und der Interpreter erwartet Ihre Eingabe.Whether you are using the console or Visual Studio, a command prompt appears and the interpreter awaits your input. Sie können Code auf die gleiche Weise wie in einer Codedatei eingeben.You can enter code just as you would in a code file. Geben Sie zum Kompilieren und Ausführen des Codes zwei Semikolons (;;) ein, um eine oder mehrere Zeilen der Eingabe zu beenden.To compile and execute the code, enter two semicolons (;;) to terminate a line or several lines of input.

F# Interactive beginnt mit der Kompilierung des Codes, und wenn der Code erfolgreich kompiliert wurde, führt F# Interactive den Code aus und gibt die Signatur der kompilierten Typen und Werte aus.F# Interactive attempts to compile the code and, if successful, it executes the code and prints the signature of the types and values that it compiled. Wenn Fehler auftreten, gibt der Interpreter die Fehlermeldungen aus.If errors occur, the interpreter prints the error messages.

In der gleichen Sitzung eingegebener Code kann auf alle zuvor eingegebenen Konstrukte zugreifen. Daher können Sie Programme erstellen.Code entered in the same session has access to any constructs entered previously, so you can build up programs. Ein umfangreicher Puffer im Toolfenster ermöglicht es Ihnen, den Code bei Bedarf in eine Datei zu kopieren.An extensive buffer in the tool window allows you to copy the code into a file if needed.

In Visual Studio wird F# Interactive unabhängig vom Projekt ausgeführt. Daher können Sie im Projekt definierte Konstrukte nur dann in F# Interactive verwenden, wenn Sie den Code für die Funktion in das Interactive-Fenster kopieren.When run in Visual Studio, F# Interactive runs independently of your project, so, for example, you cannot use constructs defined in your project in F# Interactive unless you copy the code for the function into the interactive window.

Wenn Sie ein Projekt geöffnet haben, das auf einige Bibliotheken verweist, können Sie auf diese über den Projektmappen-Explorer in F# Interactive verweisen.If you have a project open that references some libraries, you can reference these in F# Interactive through Solution Explorer. Um auf eine Bibliothek in F# Interactive zu verweisen, erweitern Sie den Knoten Verweise, öffnen Sie das Kontextmenü für die Bibliothek, und wählen Sie An F# Interactive senden aus.To reference a library in F# Interactive, expand the References node, open the shortcut menu for the library, and choose Send to F# Interactive.

Sie können die Befehlszeilenargumente (Optionen) von F# Interactive steuern, indem Sie die Einstellungen anpassen.You can control the F# Interactive command line arguments (options) by adjusting the settings. Wählen Sie im Menü Extras den Eintrag Optionen aus, und erweitern Sie anschließend F#-Tools.On the Tools menu, select Options..., and then expand F# Tools. Die beiden Einstellungen, die Sie ändern können, sind die F# Interactive-Optionen und die Einstellung 64-Bit-F# Interactive, die nur relevant ist, wenn Sie F# Interactive auf einem 64-Bit-Computer ausführen.The two settings that you can change are the F# Interactive options and the 64-bit F# Interactive setting, which is relevant only if you are running F# Interactive on a 64-bit machine. Mit dieser Einstellung legen Sie fest, ob Sie die dedizierte 64-Bit-Version von fsi.exe oder aber fsianycpu.exe ausführen möchten, die anhand der Computerarchitektur ermittelt, ob sie als 32-Bit- oder 64-Bit-Prozess ausgeführt werden soll.This setting determines whether you want to run the dedicated 64-bit version of fsi.exe or fsianycpu.exe, which uses the machine architecture to determine whether to run as a 32-bit or 64-bit process.

Skripterstellung mit F#Scripting with F#

Für Skripts wird die Dateierweiterung .fsx oder .fsscript verwendet.Scripts use the file extension .fsx or .fsscript. Statt Quellcode zu kompilieren und später die kompilierte Assembly auszuführen, können Sie einfach fsi.exe ausführen und den Dateinamen des Skripts mit dem F#-Quellcode angeben. F# Interactive liest dann den Code und führt ihn in Echtzeit aus.Instead of compiling source code and then later running the compiled assembly, you can just run fsi.exe and specify the filename of the script of F# source code, and F# interactive reads the code and executes it in real time.

Unterschiede zwischen interaktiven, Skripterstellungs- und KompilierungsumgebungenDifferences Between the Interactive, Scripting and Compiled Environments

Wenn Sie Code in F# Interactive kompilieren, unabhängig davon, ob die Ausführung interaktiv oder über ein Skript erfolgt, ist das Symbol INTERACTIVE definiert.When you are compiling code in F# Interactive, whether you are running interactively or running a script, the symbol INTERACTIVE is defined. Beim Kompilieren von Code im Compiler ist das Symbol COMPILED definiert.When you are compiling code in the compiler, the symbol COMPILED is defined. Wenn Code im Kompilierungsmodus und interaktiven Modus unterschiedlich sein muss, können Sie mithilfe von Präprozessoranweisungen für die bedingte Kompilierung bestimmen, welcher Code verwendet werden soll.Thus, if code needs to be different in compiled and interactive modes, you can use preprocessor directives for conditional compilation to determine which to use.

Beim Ausführen von Skripts in F# Interactive sind einige Direktiven verfügbar, die beim Ausführen des Compilers nicht verfügbar sind.Some directives are available when you are executing scripts in F# Interactive that are not available when you are executing the compiler. In der folgenden Tabelle sind die Direktiven zusammengefasst, die verfügbar sind, wenn Sie F# Interactive verwenden.The following table summarizes directives that are available when you are using F# Interactive.

DirektiveDirective BeschreibungDescription
#help#help Zeigt Informationen über verfügbare Anweisungen an.Displays information about available directives.
#I#I Gibt einen Assemblysuchpfad an (in Anführungszeichen).Specifies an assembly search path in quotation marks.
#load#load Liest eine Quelldatei, kompiliert sie und führt sie aus.Reads a source file, compiles it, and runs it.
#quit#quit Beendet eine F# Interactive-Sitzung.Terminates an F# Interactive session.
#r#r Verweist auf eine Assembly.References an assembly.
#time ["on"|"off"]#time ["on"|"off"] Einzeln angegeben aktiviert bzw. deaktiviert #time die Anzeige von Leistungsinformationen.By itself, #time toggles whether to display performance information. Wenn die Option aktiviert ist, überwacht F# Interactive die reale Zeit, die CPU-Zeit sowie Garbage Collection-Informationen für jeden Codeabschnitt, der interpretiert und ausgeführt wird.When it is enabled, F# Interactive measures real time, CPU time, and garbage collection information for each section of code that is interpreted and executed.

Wenn Sie Dateien oder Pfade in F# Interactive angeben, wird ein Zeichenfolgenliteral erwartet.When you specify files or paths in F# Interactive, a string literal is expected. Daher müssen Dateien und Pfade in Anführungszeichen stehen. Es gelten die üblichen Escapezeichen.Therefore, files and paths must be in quotation marks, and the usual escape characters apply. Zusätzlich können Sie das Zeichen @ verwenden. F# Interactive wird damit angewiesen, eine Zeichenfolge mit einem Pfad als wörtliche Zeichenfolge zu interpretieren.Also, you can use the @ character to cause F# Interactive to interpret a string that contains a path as a verbatim string. F# Interactive ignoriert in diesem Fall alle Escapezeichen.This causes F# Interactive to ignore any escape characters.

Der Kompilierungsmodus und der interaktive Modus unterscheiden sich u. a. durch die Art des Zugriffs auf Befehlszeilenargumente.One of the differences between compiled and interactive mode is the way you access command line arguments. Verwenden Sie im Kompilierungsmodus System.Environment.GetCommandLineArgs.In compiled mode, use System.Environment.GetCommandLineArgs. Verwenden Sie in Skripts fsi.CommandLineArgs.In scripts, use fsi.CommandLineArgs.

Im folgenden Code wird das Erstellen einer Funktion veranschaulicht, die die Befehlszeilenargumente in einem Skript liest, und es wird außerdem gezeigt, wie aus einem Skript auf eine andere Assembly verwiesen wird.The following code illustrates how to create a function that reads the command line arguments in a script and also demonstrates how to reference another assembly from a script. Die erste Codedatei MyAssembly.fs ist der Code für die Assembly, auf die verwiesen wird.The first code file, MyAssembly.fs, is the code for the assembly being referenced. Kompilieren Sie diese Datei mit der Befehlszeile: fsc -a MyAssembly.fs und führen Sie dann die zweite Datei mit der Befehlszeile: fsi --exec file1.fsx testenCompile this file with the command line: fsc -a MyAssembly.fs and then execute the second file as a script with the command line: fsi --exec file1.fsx test

// MyAssembly.fs
module MyAssembly
let myFunction x y = x + 2 * y
// file1.fsx
#r "MyAssembly.dll"

printfn "Command line arguments: "

for arg in fsi.CommandLineArgs do
    printfn "%s" arg

printfn "%A" (MyAssembly.myFunction 10 40)

Die Ausgabe lautet wie folgt:The output is as follows:

Command line arguments: 
file1.fsx
test
60
TitelTitle BeschreibungDescription
F# Interactive-OptionenF# Interactive Options Beschreibt die Befehlszeilensyntax und Optionen für F# Interactive (fsi.exe).Describes command line syntax and options for the F# Interactive, fsi.exe.
Referenz zur F# Interactive-BibliothekF# Interactive Library Reference Beschreibt die beim Ausführen von Code in F# Interactive verfügbare Bibliotheksfunktion.Describes library functionality available when executing code in F# interactive.