Qual è il punto di un Expr in vanilla F #? Come può essere applicato? [chiuso]

1

Senza utilizzare il power pack per convertire le espressioni di Expr in C #, sembra che una volta creato un Expr, l'unica cosa che posso fare sia stamparne una rappresentazione in stringa, o ... creare un altro Expr.

Se stampo una citazione in codice di un'espressione, vedo che stampa le chiamate ai metodi Expr statici. Come posso usarli per qualcosa di utile?

    
posta moarboilerplate 12.08.2015 - 03:22
fonte

1 risposta

3

Sembra che manchi la capacità di essere in grado di analizzare un'espressione usando la corrispondenza del modello . Ad esempio:

open Microsoft.FSharp.Quotations.Patterns
open Microsoft.FSharp.Quotations.DerivedPatterns

let x = <@@ fun y -> y + 100 @@>

let extractConstantValue = function 
    | Lambda(_, SpecificCall <@@ (+) @@> (_, _, _ :: Value(:? int as constant, _) :: _)) -> constant 
    | _ -> 0

printfn "Value of constant is %O" (extractConstantValue x)
// prints "Value of constant is 100"

Questo ti dà tutto il potere di interpretare ed elaborare le espressioni, comprese quelle generate tramite l'espressione di calcolo query (le clausole in query blocchi sono citate automaticamente, cioè trasformate in espressioni dal compilatore). Tenendo questo a mente, la maggior parte dei provider di tipi, come OdataService e SqlEntityConnection , sono parser e consumatori di espressioni di query.

Inoltre, provider come Websharper traducono le espressioni in Javascript.

Non puoi , come hai fatto allusione, compilare o valutare espressioni senza il Powerpack. Oltre a questo, i possibili usi per le espressioni F # sono gli stessi delle espressioni .NET. In casi semplici, potresti usarli per descrivere operazioni, o per analizzare un'espressione matematica, o per tradurre un semplice codice F # in qualche altra sintassi.

    
risposta data 12.08.2015 - 14:24
fonte

Leggi altre domande sui tag