F#如何正确调用let函数? [<EntryPoint>] 中的函数调用不工作

F# How to call let function correctly? Function call in [<EntryPoint>] isn't working

我是 F# 新手。我想要做的是多次调用 test 以打印出 Hello World。在这个例子中,我想调用 test 三次。当我 运行 代码时,它只打印一次到控制台。即使没有 test 调用,它也会 运行s。我有以下代码:

open System

let test =
    let mutable output = ""
    output <- "Hello World"

    printfn "%s" output

[<EntryPoint>]
let main argv = 
    test
    test
    test
    ignore(Console.ReadKey())
    0 

如果你想让test成为一个函数,像这样声明它:

let test () =

... 并这样称呼它:

test ()

一个函数总是接收一个参数和returns一个值。在您看到多个参数的地方,这些参数被柯里化到一系列函数中,每个函数接收一个参数。这就是为什么您会看到像 int -> string -> string.

这样的签名的原因

如果不需要参数,如本例,则使用单位,用()表示。

test 不是一个函数,它是一个变量,所以你不能调用它。您只能访问它的值,即 ()。访问一个值而不对其进行任何操作不会以任何方式影响程序的行为,这就是为什么在 main 函数中写入 test 没有任何效果。

如果您希望能够调用 test,您需要通过给它一个参数使其成为一个函数。由于您似乎实际上不需要任何参数,因此可以使用 unit 作为参数类型。看起来像这样:

let test () =
    let mutable output = ""
    output <- "Hello World"
    printfn "%s" output

相应的调用如下所示:

test ()

test 不是一个函数——它是一个 unit 类型的值。您必须添加括号:

let test () =
    let mutable output = ""
    output <- "Hello World"

    printfn "%s" output

并这样称呼它:

[<EntryPoint>]
let main argv = 
    test()
    test()
    test()
    ignore(Console.ReadKey())
    0