F#中的&IMPORT&的等价物是什么等价物、amp、IMPORT

2023-09-04 02:01:17 作者:╰让自己笑的、更灿烂╰╮

如何在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

推荐答案

网宝 美国服务器和香港服务器租用 Part 20

等效于importopen

如果我使用您的粘贴板代码,它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尚不存在。

错误FS0010:定义中的结构化构造意外开始。应为‘=’或其他标记。

这大约是最后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
请注意,在模块中,您可以删除第一级缩进和