F#main vs main()语法

时间:2017-01-22 03:41:07

标签: syntax f#

我只是想通过浏览Wikibook来学习一些F#:https://en.wikibooks.org/wiki/F_Sharp_Programming/

请考虑以下示例: https://en.wikibooks.org/wiki/F_Sharp_Programming/Mutable_Data

open System

let withSideEffects x =
    x := "assigned from withSideEffects function"

let refTest() =
    let msg = ref "hello"
    printfn "%s" !msg

    let setMsg() =
        msg := "world"

    setMsg()
    printfn "%s" !msg

    withSideEffects msg
    printfn "%s" !msg

let main() =
    refTest()
    Console.ReadKey(true) |> ignore

main()

我意识到他们在每个有副作用的功能之后放了()。删除大括号可以很好地编译并从单位更改类型 - >单位到单位。

问题:

  1. 这是F#程序员之间的某种沉默的凝聚吗?
  2. 2种语法中的一种是否有任何好处?

1 个答案:

答案 0 :(得分:1)

()添加到绑定会将其从立即执行的块更改为接受unit的函数,其中返回值绑定到标识符(在本例中为unit)并返回unit(写作unit -> unit)。

这样做的好处是延迟执行并且可以执行多次。这可能是抽象出副作用的有用方法,但它只是您日常工具包中可以使用的语言的简单属性。你可能会过度思考它。