Share via


Lazy.CreateFromValue<'T>, méthode d'extension (F#)

Crée un calcul tardif qui prend la valeur donnée lorsqu'il est forcé.

Espace de noms/Chemin du module : 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)

Paramètres

  • value
    Type : 'T.

    Valeur d'entrée.

Valeur de retour

Objet Lazy créé.

Exemple

L'exemple de code suivant illustre l'utilisation de cette méthode d'extension Lazy.CreateFromValue. Dans cet exemple, un dictionnaire est utilisé pour stocker les valeurs précédemment calculées. Lorsque la fonction factorielle est appelée et que la valeur est déjà calculée, Lazy.CreateFromValue est appelé avec le résultat mis en cache. Si la valeur n'est pas déjà calculée, Lazy.Create est utilisé.


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

Sortie

                

Plateformes

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

Informations de version

Runtime F#

Prise en charge dans : 2.0

Silverlight

Prise en charge dans : 3

Voir aussi

Référence

Control.LazyExtensions, module (F#)

Lazy<T>

Calculs tardifs (F#)

Historique des modifications

Date

Historique

Motif

Mai 2010

Ajout d'un exemple de code

Améliorations apportées aux informations.