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.