2016-05-23 9 views
2

Ich denke, ich vermisse etwas wirklich einfaches hier.F # -Funktion läuft ohne aufgerufen zu werden

Dieser Code

open System.Threading 

let duration = 1000 

module SequentialExample = 
    let private someTask item = 
     printfn "oh god why" 
     Thread.Sleep(duration) 
     item + " was computed" 

    let private items = [ 
     "foo" 
     "bar" 
     "baz" 
    ] 

    let getComputedItems = 
     printfn "heh" 
     [for item in items -> someTask item] 
     |> Array.ofList 

module ParallelExample = 
    let private someTask item = 
     printfn "that's ok" 
     Thread.Sleep(duration) 
     item + " was computed" 

    let private items = [ 
     "foo" 
     "bar" 
     "baz" 
    ] 

    let getComputedItems = 
     Async.Parallel [for item in items -> async { return someTask item }] 
     |> Async.RunSynchronously 

[<EntryPoint>] 
let main args = 
    ParallelExample.getComputedItems |> ignore 
    0 

Hat die folgende Ausgabe:

heh 
oh god why 
oh god why 
oh god why 
that's ok 
that's ok 
that's ok 

Wenn ich ParallelExample Modul bin aufrufen, warum Sie den Code in SequentialExample Modul F # ausgeführt wird?

Was mache ich falsch?

(Lieber Stackoverflow, aufhören zu sagen: "Es sieht aus wie Sie Ihre Post meist Code ist;. Sie einige weitere Details hinzufügen", meine Frage genug Details hat)

+2

Im Wesentlichen, in einer Moduldatei, wenn der Compiler zu irgendeinem Zeitpunkt etwas wie "let a = ..." sieht, berechnet er den Wert von 'a' –

+0

Wissen Sie, warum der F # -Compiler so funktioniert? – Gabriel

+1

naja es muss irgendwann kalkuliert werden und der start ist die beste zeit. Es muss irgendwo in der Spezifikation irgendwo definiert werden –

Antwort

7

Wie John Palmer sagte in den Kommentaren, let getComputedItems = ... ist eigentlich ein Wert, keine Funktion, , weil eine Funktion ein Argument nehmen muss.

Um es zu einer Funktion zu machen, muss man es wie let getComputedItems() = ... deklarieren.

+1

... oder 'lass getComputedItems = ... fun() -> ...' – Jay

Verwandte Themen