Partager 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 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informations de version

Versions de bibliothèque principale F#

Prise en charge dans : 2.0

Voir aussi

Référence

Control.LazyExtensions, module (F#)

Lazy

Calculs tardifs (F#)