我想从Quotation
的记录中获取字段的类型值。看起来应该是直截了当但我有点失落。
如,
type FullName = { First : string; Last : string }
type Name = { Name : FullName }
let t = { Name = { First = "Jon"; Last = "N" } }
let name = <@ t.Name.First @>
然后我想取值name
并将Jon
作为string
(而不是obj
)。我该怎么做?有时返回值可能是Array
或其他Record
。
提前致谢!
更新
我将在F#的边缘使用此功能,因此需要检查null
:
let getValue (expr: Quotations.Expr<'t>) =
match eval expr with
| null -> None
| x -> Some ((eval expr) :?> 't)
答案 0 :(得分:4)
你链接的eval script会让你到一半 - 它会为你计算表达式的实际值。现在剩下要做的就是将该值转换为适当的类型:
let getValue (expr: Quotations.Expr<'t>) = (eval expr) :?> 't
let valueOfName = getValue name // valueOfName : string
请记住理论上演员表可能会崩溃,但在实践中不应该发生,因为eval
总会返回正确类型的值(除非有它中的一个错误。)