如何在F#交互环境中加载外部的F#脚本文件并使用它?

22

我想将一个或多个 .fsx 文件加载到 F# 交互式环境中,并使所有在 .fsx 文件中定义的函数在作用域内,以便我可以直接在控制台中使用这些函数。

#load 指令会执行指定的 .fsx 文件,但是之后我无法再使用该文件中的函数。有没有解决方法?谢谢。

3个回答

39

如果在fsx文件中没有声明模块,则会隐式创建一个与文件名相同的模块。

因此,在使用之前,您可以始终使用完全限定名称或打开相应的模块来引用另一个fsx文件。例如,在Script2.fsx中,您可以执行以下操作:

#load "Script1.fsx"

open Script1

// Use functions in Script1.fsx
// ...

11
请注意,无论文件名如何,隐式模块始终使用标题大小写。 - Jon Canning
似乎隐式模块总是会被创建,除非你在 .fsx 中声明一个“整个文件”的模块。也就是说,如果你在模块后面放置等号,即使那是脚本中唯一的模块,该模块也会被放入隐式模块中。 - piers7

31

我怀疑你加载的脚本不是一个模块,这可能导致你的问题。只需添加

module Script1

你可以在第一份脚本中执行,然后就可以继续操作了。

#load "Script1.fsx"
open Script1

你的函数将会被访问到。


1
那么你就失去了独立运行 Script1.fsx 的能力。 - pad
是的,如果我在Windows上,这个可以工作...但是如果我在我的Mac上使用Mono,它仍然无法工作。 - ximyu
这样做可以让你在*.fsx中使用你的*.fs源文件! - Dan Rayson

1

如果要从终端运行脚本并在交互模式下使用它,可以添加以下指令:

#if INTERACTIVE
#else
module Script
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接