Condividi tramite


Metodo di estensione Lazy.CreateFromValue<'T> (F#)

Crea un calcolo differito che restituisce il valore specificato nel momento in cui viene imposto.

Percorso di spazio dei nomi/modulo: 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)

Parametri

  • value
    Tipo: 'T

    Valore di input.

Valore restituito

Oggetto Lazy creato.

Esempio

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del metodo di estensione Lazy.CreateFromValue. In questo esempio, un dizionario viene utilizzato per archiviare i valori precedentemente calcolati. Quando la funzione fattoriale viene chiamata, se il valore è già calcolato, Lazy.CreateFromValue viene chiamato con il risultato memorizzato nella cache. Se il valore non è già calcolato, viene quindi utilizzato Lazy.Create.

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

  
  
  
  
  
  
  

Piattaforme

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

Informazioni sulla versione

Versioni della libreria di base F#

Supportato in: 2.0

Vedere anche

Riferimenti

Modulo Control.LazyExtensions (F#)

Lazy

Calcoli differiti (F#)