如何在F#中从另一个文件导入函数?就像您在Python中做的import
一样。我尝试了open
、#using
,但都不起作用。我看了官方文件,还是想不通怎么用。
基本上,我想要这样的东西:
// Log.fs
module Log =
let log =
printfn "Hello, World"
// Program.fs
open Log
module main =
[<EntryPoint>]
let main argv =
log // Not working
0
等效于import
为open
。
如果我使用您的粘贴板代码,它has a bunch of errors indeed,如SharpLab上所示。这里有几点需要注意:
F#喜欢其有序的代码。每个文件都被视为单独的编译单元,从中需要的任何内容只能在后面的文件中引用,而不能在上一个文件中引用。 在单个文件中,您可以使用and
创建循环引用,但在其他情况下,同样适用:无论您要使用什么类型、值、模块,它必须已经存在并且在作用域中。
您创建的是对数值,而不是对数函数。
您忘记了module
定义后的=
符号。
您的原始代码如下:
// Program.fs
module main
open Log
[<EntryPoint>]
let main argv =
printfn "Hello"
log
0 // return an integer exit code
// Log.fs
module Log
let log =
printfn "Hello"
这将显示以下错误:
错误FS0039:未定义命名空间或模块‘Log’。
您得到此模块是因为您有open Log
,但模块Log
尚不存在。
这大约是最后let
,必须缩进。
错误FS0010:实现文件中此点或之前的结构化构造不完整
相同,由上一个错误引起。
更改代码顺序后,适当缩进,将let log
更改为let log()
,并添加必要的=
符号,it just works, try it out:
// Log.fs
module Log =
let log() =
printfn "Hello"
// Program.fs
module main =
open Log
[<EntryPoint>]
let main argv =
printfn "Hello"
log()
0 // return an integer exit code
请注意,在模块中,您可以删除第一级缩进和