您好,我已经开始学习 F#,我想知道是否可以限制函数的输入和输出的类型。
我尝试这样做:
main : unit
let main = printf "Hello World\n" |> (fun x -> printf "Goodbye World\n")
let _ = main
我还尝试将 let
放在第一行的 main
之前。两者都不起作用。 F# 有什么办法可以做到这一点吗?我认为这是 Haskell 的一个很好的功能。
最佳答案
是的,这是完全可能的:
let main : unit = printf "Hello World\n" |> (fun x -> printf "Goodbye World\n")
此外,还有一些小要点:
首先,您可以使用 printfn
,而不是末尾的 \n
。
其次,lambda 表达式中的 x 是多余的,lambda 表达式本身也是多余的。要对多个调用进行排序,您只需按顺序列出它们,每个都换行(或用分号分隔):
let main : unit =
printfn "Hello World"
printfn "Goodbye World"
第三,这样您就不是定义一个函数,而是一个值。 F# 与 Haskell 不同,它不会延迟求值,因此一旦其作用域开始,该定义的整个主体就会执行一次,而不是每次调用它时。如果你想定义一个函数,给它一些参数。如果您没有提供任何有意义的参数,请将其设为单个 unit
值:
let main () : unit =
printfn "Hello World"
printfn "Goodbye World"
关于types - 您能否在 F# 中为函数指定特定的类型签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718850/