Udostępnij za pośrednictwem


Lazy.CreateFromValue <'T> Metoda rozszerzenie (F#)

Tworzy leniwy obliczeń, dającą danej wartości, dla których wymuszone.

Ścieżka obszaru nazw/modułu: Microsoft.FSharp.Control.LazyExtensions

Zestaw: FSharp.Core (w FSharp.Core.dll)

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

// Usage:
lazy.CreateFromValue (value)

Parametry

  • value
    Typ:'T

    Wartość wejściowa.

Wartość zwracana

Utworzony Lazy obiektu.

Przykład

Poniższy przykład kodu ilustruje użycie Lazy.CreateFromValue metodę rozszerzenia.W tym przykładzie słownik jest używany do przechowywania uprzednio obliczonych wartości.Gdy wywoływana funkcja silni, jeśli wartość już jest obliczana, następnie Lazy.CreateFromValue jest wywoływana z buforowanego wyniku.Jeśli wartość jest nie już obliczana, następnie Lazy.Create jest używana.


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())

Dane wyjściowe

  
  
  
  
  
  
  

Platformy

Windows 8, Windows 7, Windows Server 2012 Windows Server 2008 R2

Informacje o wersji

F# Core wersji biblioteki

Obsługiwane: 2.0

Zobacz też

Informacje

Moduł Control.LazyExtensions (F#)

Lazy<T>

Obliczenia z opóźnieniem (F#)