2016-08-19 4 views
2

F # 코드 식을 구성하려고합니다. 그러나 나는 코드 인용을 통해 그것을하고 싶지 않지만 객체를 통해 그것을 만들고 싶다. 그러나 어떻게하는지에 대한 문서는 꽤 부족합니다.건물 코드 식 "수동"

다음 코드

ex에 대한 산출
type Foo = { foo = string} 
let bar = {foo = "foo"} 
let ex = <@ bar.foo @> 

을 감안할 때.

PropertyGet (Some (ValueWithName ({foo = "foo";}, bar)), foo, []) 

하지만 위의 정확한 용어를 복제 할 수 없습니다. 예를 들어 나는 생성자 ValueWithName에서 아무것도 찾지 못한다.

그래서 수동으로 견적을 구성 라이브러리를 사용하여 할 수있는 I

<@ bar.foo @> = PropertyGet (Some (ValueWithName ({foo = "foo";}, bar)), foo, []) 

답변

4

이 제대로 수행하는 것은 매우 어려운, 그래서 내가보기 엔 어디든지 당신이 할 수있는 인용 리터럴을 사용하는 것이 좋습니다 것입니다 방법에 대해 설명합니다. 그러나 다음과 같이 원하는 경우 예제를 얻는 방법은 다음과 같습니다.

open Microsoft.FSharp.Quotations 

Expr.PropertyGet(
    Expr.ValueWithName({ foo = "foo" }, "bar"), 
    typeof<Foo>.GetProperty("foo"))