Compartir a través de


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

Información de versiones

Runtime de F#

Admitido en: 2.0

Silverlight

Se admite en la versión: 3

Vea también

Referencia

Control.LazyExtensions (Módulo de F#)

Lazy<T>

Expresiones con procesamiento diferido (F#)

Historial de cambios

Fecha

Historial

Motivo

Mayo de 2010

Se ha agregado un ejemplo de código.

Mejora de la información.