F# Interactive (fsi.exe) 参考

F# Interactive (fsi.exe) 可用于在控制台上以交互方式运行 F# 代码,或用于执行 F# 脚本。 换言之,F# Interactive 可为 F# 语言执行 REPL(读取、计算和输出循环)。

使用 F# 进行交互式编程

可以使用 F# Interactive 在控制台上或 Visual Studio 的窗口中编写代码。

若要从控制台运行 F# Interactive,请运行 fsi.exe。 有关可用的命令行选项的信息,请参见 F# Interactive 选项

若要通过 Visual Studio 2010 运行 F# Interactive,可以单击标记为**“F# Interactive”的适当的工具栏按钮,或使用组合键 Ctrl+Alt+F。 执行此操作将打开交互窗口,这是一个运行 F# Interactive 会话的工具窗口。 也可以选择要在交互窗口中运行的一些代码,并单击组合键 Alt+Enter。 F# Interactive 将在标记为“F# Interactive”**的工具窗口中启动。 当您使用此组合键时,请确保编辑器窗口具有焦点。

无论您使用的是控制台还是 Visual Studio 2010,都会出现命令提示符,并且解释器会等待您的输入。 您可以像在代码文件中一样输入代码。 若要编译并执行代码,请输入两个分号 (;;) 来结束一个或多个输入行。

F# Interactive 会尝试编译代码,如果成功,则会执行代码并输出所编译的类型和值的签名。 如果发生错误,则解释器会输出错误消息。

由于同一会话中输入的代码具有对先前输入的任何构造的访问权,因此您可以生成程序。 利用工具窗口中的大容量缓冲区,您可以根据需要将代码复制到某个文件中。

在 Visual Studio 中运行时,F# Interactive 将独立于项目运行,因此,您无法在 F# Interactive 中使用项目中定义的构造,除非您将函数的代码复制到交互窗口中。

您可以通过调整设置来控制 F# Interactive 命令行参数(选项)。 在**“工具”菜单上,选择“选项...”,然后展开“F# 工具”**。 您可以更改的两个设置是 F# interactive 的选项和设置的 交互式 64 位的 F# ,相关,仅当您运行 F# interactive 在 64 位计算机。 此设置确定是否希望运行 fsi.exe 或 fsianycpu.exe 的私有的 64 位版本,是否使用计算机体系结构确定运行作为 32 位或 64 位进程。

使用 F# 编写脚本

脚本将使用文件扩展名 .fsx 或 .fsscript。 只需运行 fsi.exe 并指定 F# 源代码的脚本的文件名,F# Interactive 即会实时读取并执行代码,而不用先编译源代码,然后再运行编译后的程序集。

交互环境、脚本环境和编译环境之间的差异

在 F# Interactive 中编译代码时,无论您是以交互方式运行还是运行脚本,都会定义符号 INTERACTIVE。 在编译器中编译代码时,会定义符号 COMPILED。 因此,如果代码需要在编译模式和交互模式中有所不同,则可以使用用于条件编译的预处理器指令来确定要使用的模式。

在 F# Interactive 中执行脚本时可用的一些指令在执行编译器时不可用。 下表汇总了在使用 F# Interactive 时可用的指令。

指令

说明

#help

显示有关可用指令的信息。

#I

在引号中指定程序集搜索路径。

#load

读取源文件,编译并运行它。

#quit

终止 F# Interactive 会话。

#r

引用程序集。

#time ["on"|"off"]

#time 会自行切换是否要显示性能信息。 在启用它时,F# Interactive 会为解释和执行每个代码部分检测实际时间、CPU 时间和垃圾回收信息。

当在 F# Interactive 中指定文件或路径时,应使用字符串文本。 因此,文件和路径必须位于引号中,并且应用常见的转义字符。 此外,您还可以使用 @ 字符来使 F# Interactive 将包含路径的字符串解释为原义字符串。 这会导致 F# Interactive 忽略任何转义字符。

编译模式和交互模式之间的一个差别是,访问命令行参数的方式不同。 在编译模式中,使用 GetCommandLineArgs。 在脚本中,使用 fsi.CommandLineArgs。

以下代码演示如何创建可读取脚本中的命令行参数的函数,并演示如何从脚本中引用另一个程序集。 第一个代码文件 MyAssembly.fs 是所引用的程序集的代码。 使用命令行 fsc -a MyAssembly.fs 编译此文件,然后使用命令行 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)

输出如下所示:

file1.fsx
test
60

相关主题

标题

说明

F# Interactive 选项

描述 F# Interactive (fsi.exe) 的命令行语法和选项。

F# Interactive 库参考

描述在 F# Interactive 中执行代码时可用的库功能。