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#)
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Mai 2010 |
Ajout d'un exemple de code |
Améliorations apportées aux informations. |