Lazy.CreateFromValue<'T> (Método de extensión de F#)

Crea una expresión con procesamiento diferido que se evalúa como el valor especificado en caso de que se fuerce.

Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Control.LazyExtensions

Ensamblado: FSharp.Core (en FSharp.Core.dll)

// Signature:
type System.Lazy with
  member static CreateFromValue : Lazy<'T>

// Usage:
lazy.CreateFromValue (value)

Parámetros

  • value
    Tipo: 'T

    Valor de entrada.

Valor devuelto

Objeto Lazy que se ha creado.

Ejemplo

En el ejemplo de código siguiente se muestra el uso de este método de extensión Lazy.CreateFromValue.En este ejemplo, se usa un diccionario para almacenar los valores previamente calculados.Cuando se llama a la función factorial, si el valor ya está calculado, se llama a Lazy.CreateFromValue con el resultado almacenado en caché.Si el valor no se ha calculado aún, se usa 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

  
  
  
  
  
  
  

Plataformas

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

Información de versiones

Versiones de la biblioteca básica de F#

Se admite en la versión: 2.0

Vea también

Referencia

Control.LazyExtensions (Módulo de F#)

Lazy<T>

Expresiones con procesamiento diferido (F#)