F# 交互窗口选项

本文介绍 F# 交互窗口 fsi.exe 支持的命令行选项。 F# 交互窗口接受许多与 F# 编译器相同的命令行选项,但也接受一些其他选项。

使用 F# 交互窗口编写脚本

F# 交互窗口 dotnet fsi 可通过交互方式启动,也可以从命令行启动,以运行脚本。 命令行语法是

dotnet fsi [options] [ script-file [arguments] ]

F# 脚本文件的文件扩展名为 .fsx

F# 交互窗口选项表

下表总结了 F# 交互窗口支持的选项。 你可以在命令行上或通过 Visual Studio IDE 来设置这些选项。 若要在 Visual Studio IDE 中设置这些选项,请打开“工具”菜单,选择“选项”,展开“F# 工具”节点,然后选择“F# 交互窗口”。

在 F# 交互窗口选项参数中显示了列表的位置,列出由分号 (;) 分隔的元素。

选项 说明
-- 用于指示 F# 交互窗口将剩余的参数当作 F# 程序或脚本的命令行参数,你可以使用列表 fsi.CommandLineArgs 在代码中访问这些参数。
--checked[+|-] 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--codepage:<int> 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--consolecolors[+|-] 以彩色输出警告和错误消息。
**--compilertool:<extensionsfolder> 引用包含设计时工具的程序集或目录(短格式: -t)。
--crossoptimize[+|-] 启用或禁用跨模块优化。
--debug[+|-]

--debug:[full|pdbonly|portable|embedded]

-g[+|-]

-g:[full|pdbonly|portable|embedded]
与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--define:<string> 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--deterministic[+|-] 产生确定性的程序集(包括模块版本 GUID 和时间戳)。
--exec 指示 F# 交互窗口在加载文件或运行命令行上给定的脚本文件后退出。
--fullpaths 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--gui[+|-] 启用或禁用 Windows 窗体事件循环。 默认是启用的。
--help

-?
用于显示命令行语法和每个选项的简短说明。
--lib:<folder-list>

-I:<folder-list>
与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--load:<filename> 在启动时编译给定的源代码,并将已编译的 F# 构造加载到会话中。
--mlcompatibility 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--noframework 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--nologo 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--nowarn:<warning-list> 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--optimize[+|-] 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--preferreduilang:<lang> 指定首选的输出语言区域性名称(例如 es-ES 和 ja-JP)。
--quiet 抑制 F# 交互窗口向 stdout 流的输出。
--quotations-debug 指定应为派生自 F# 引用文本和反射定义的表达式发出的额外调试信息。 调试信息将添加到 F# 表达式树节点的自定义属性中。 请参阅代码引用Expr.CustomAttributes
--readline[+|-] 启用或禁用交互模式下的选项卡补全。
--reference:<filename>

-r:<filename>
与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--tailcalls[+|-] 启用或禁用尾 IL 指令,这将导致对尾递归函数重复使用堆栈帧。 默认情况下该选项处于启用状态。
--targetprofile:<string> 指定此程序集的目标框架配置文件。 有效值为 mscorlibnetcorenetstandard。 默认为 mscorlib
--use:<filename> 通知解释器在启动时使用给定文件作为初始输入。
--utf8output 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--warn:<warning-level> 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--warnaserror[+|-] 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项
--warnaserror[+|-]:<int-list> 与 fsc.exe 编译器选项相同。 有关详细信息,请参阅编译器选项

F# 交互窗口结构化打印

F# 交互窗口 (dotnet fsi) 使用结构化纯文本格式的扩展版本来报告值。

  1. 支持 %A 纯文本格式设置的所有功能,可对其中一些功能进行额外的自定义。

  2. 如果输出控制台支持颜色,将给打印着色。

  3. 对显示的字符串的长度设定限制,除非你显式地计算该字符串。

  4. 可通过 fsi 对象提供一组用户可定义的设置。

用于为报告值自定义纯文本打印的可用设置是:

open System.Globalization

fsi.FormatProvider <- CultureInfo("de-DE")  // control the default culture for primitives

fsi.PrintWidth <- 120        // Control the width used for structured printing

fsi.PrintDepth <- 10         // Control the maximum depth of nested printing

fsi.PrintLength <- 10        // Control the length of lists and arrays

fsi.PrintSize <- 100         // Control the maximum overall object count

fsi.ShowProperties <- false  // Control whether properties of .NET objects are shown by default

fsi.ShowIEnumerable <- false // Control whether sequence values are expanded by default

fsi.ShowDeclarationValues <- false // Control whether values are shown for declaration outputs

使用 AddPrinterAddPrintTransformer 进行自定义

可使用 fsi.AddPrinterfsi.AddPrintTransformer 对在 F# 交互窗口输出中打印进行自定义。 第一个函数提供文本来替换对象的打印。 第二个函数则返回要显示的代理对象。 例如,请考虑下面的 F# 代码:

open System

fsi.AddPrinter<DateTime>(fun dt -> dt.ToString("s"))

type DateAndLabel =
    { Date: DateTime
      Label: string  }

let newYearsDay1999 =
    { Date = DateTime(1999, 1, 1)
      Label = "New Year" }

如果你在 F# 交互窗口中执行示例,它基于格式设置选项集进行输出。 在这种情况下,它会影响日期和时间的格式设置:

type DateAndLabel =
  { Date: DateTime
    Label: string }
val newYearsDay1999 : DateAndLabel = { Date = 1999-01-01T00:00:00
                                       Label = "New Year" }

fsi.AddPrintTransformer 可用于为打印提供代理对象:

type MyList(values: int list) =
    member _.Values = values

fsi.AddPrintTransformer(fun (x:MyList) -> box x.Values)

let x = MyList([1..10])

输出:

val x : MyList = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

如果传递给 fsi.AddPrintTransformer 的转换器函数返回 null,则忽略打印转换器。 这可用于从 obj 类型开始来筛选任何输入值。 例如:

fsi.AddPrintTransformer(fun (x:obj) ->
    match x with
    | :? string as s when s = "beep" -> box ["quack"; "quack"; "quack"]
    | _ -> null)

let y = "beep"

输出:

val y : string = ["quack"; "quack"; "quack"]
Title 描述
编译器选项 介绍 F# 编译器 fsc.exe 提供的命令行选项。