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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2.

Informazioni sulla versione

F# Runtime

Supportata in: 2.0

Silverlight

Supportato in: 3

Vedere anche

Riferimenti

Modulo Control.LazyExtensions (F#)

Lazy<T>

Calcoli differiti (F#)

Cronologia delle modifiche

Data

Cronologia

Motivo

Maggio 2010

Aggiunto esempio di codice.

Miglioramento delle informazioni.