2017-01-22 14 views
0

Ich versuche nur, indem Sie durch die Wikibook einige F # zu lernen: https://en.wikibooks.org/wiki/F_Sharp_Programming/F # main vs main() Syntax

aus folgendes Beispiel: 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() 

Ich erkannte, dass sie setzen () nach jeder Funktion, die Nebenwirkungen hat. Das Entfernen der Klammern kompiliert gleich gut und ändert den Typ von Einheit -> Einheit zu Einheit.

Fragen:

  1. Ist das eine Art stillen aggrement zwischen Programmierern F #?
  2. Gibt es irgendwelche Vorteile für eine der 2 Syntaxen?
+1

Auch [Warum funktionieren F # Funktionen, bevor sie aufgerufen werden?] (Https://stackoverflow.com/questions/32855383/why-do-f-functions-evaluate-before-they-are-) – ildjarn

Antwort

1

Hinzufügen () an eine Bindungsänderung aus einem unmittelbar ausführt Block, wobei der Rückgabewert auf den Identifikator gebunden ist (unit in diesem Fall), um eine Funktion, die unit und gibt unit (geschrieben als unit -> unit) übernimmt.

Die Vorteile davon sind, dass die Ausführung verzögert ist und mehrfach ausgeführt werden kann. Dies kann eine nützliche Methode sein, um Nebeneffekte zu abstrahieren, aber es ist nur eine einfache Eigenschaft der Sprache, die Sie in Ihrem täglichen Toolkit verwenden können. Sie könnten es überdenken.

+0

Ah:) Wenn ich also eine Funktion getJSON = ... hätte, würde sie sofort ausgeführt werden und mein Programm würde daher kurz warten, bevor main() ausgeführt wird. – Xlaech

+0

Ohne() würde es keine Funktion sein, die eine "Einheit" nimmt und etwas zurückgibt, es wäre ein Wert, der durch Auswertung des Blocks zugewiesen wurde. Also ja, es würde eine Verzögerung geben, bevor main ausgeführt wurde. – marklam