types - 您能否在 F# 中为函数指定特定的类型签名?

标签 types f#

您好,我已经开始学习 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/

相关文章:

JavaScript 数据类型

types - 为什么 && 运算符会产生第二个操作数的类型

f# - F# 中与浮点( double 类型)的模式匹配

F# 私有(private)静态方法

F# 遍历集合并构建列表

.net - 功能范式的效率

c++ - Boost 与 .Net 随机数生成器

c# - 在运行时生成通用类型

haskell - Haskell 中树的数据类型

scala - scala中的匹配类型