Freigeben über


Lazy.CreateFromValue<'T>-Erweiterungsmethode (F#)

Erstellt eine verzögerte Berechnung, die bei Erzwingung den angegebenen Wert ergibt.

Namespace/Modulpfad: Microsoft.FSharp.Control.LazyExtensions

Assembly: FSharp.Core (in FSharp.Core.dll)

// Signature:
type System.Lazy with
  member static CreateFromValue : Lazy<'T>

// Usage:
lazy.CreateFromValue (value)

Parameter

  • value
    Typ: 'T

    Der Eingabewert.

Rückgabewert

Das erstellte Lazy-Objekt.

Beispiel

Im folgenden Codebeispiel wird die Verwendung der Lazy.CreateFromValue-Erweiterungsmethode veranschaulicht. In diesem Beispiel wird ein Wörterbuch verwendet, um zuvor berechnete Werte zu speichern. Wenn die Funktion zur Berechnung der Fakultät aufgerufen wird, wenn der Wert bereits berechnet ist, wird Lazy.CreateFromValue mit dem zwischengespeicherten Ergebnis aufgerufen. Wenn der Wert nicht bereits berechnet wurde, wird Lazy.Create verwendet.


let cacheMap = new System.Collections.Generic.Dictionary<_, _>()
cacheMap.Add(0, 1I)
cacheMap.Add(1, 1I)

let lazyFactorial n =
    let rec factorial n =
        if cacheMap.ContainsKey(n) then cacheMap.[n] else
        let result = new System.Numerics.BigInteger(n) * factorial (n - 1)
        cacheMap.Add(n, result)
        result
    if cacheMap.ContainsKey(n) then
        printfn "Reading factorial for %d from cache." n
        Lazy.CreateFromValue(cacheMap.[n])
    else
        printfn "Creating lazy factorial for %d." n
        Lazy.Create (fun () ->
            printfn "Evaluating lazy factorial for %d." n
            let result = factorial n
            result)

printfn "%A" ((lazyFactorial 12).Force())
printfn "%A" ((lazyFactorial 10).Force())
printfn "%A" ((lazyFactorial 11).Force())
printfn "%A" ((lazyFactorial 30).Force())

Output

                

Plattformen

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Versionsinformationen

F#-Runtime

Unterstützt in: 2.0

Silverlight

Unterstützt in: 3

Siehe auch

Referenz

Lazy<T>

Verzögerte Berechnungen (F#)

Weitere Ressourcen

Control.LazyExtensions-Modul (F#)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Codebeispiel hinzugefügt.

Informationsergänzung.