F # 인용구로 그립을 잡으려고 몇 시간을 보냈지만 약간의 도로 블록을 발견했습니다. 나의 요구 사항은 차별화 된 유니온 타입에서 간단한 함수 (정수, +, -, /, *)를 취하고 결국 C 코드를 생성하는 데 사용될 식 트리를 생성하는 것이다. 인용문을 '직접'기능을 사용하여 사용하는 것이 가능하다는 것을 알고 있습니다.F # 인용문 - 값으로 표시된 함수 호출로 이동
제 문제는 표현식 트리가 "값"으로 끝나는 것 같습니다. 그 값으로 넘어가는 방법을 파악할 수 없습니다.
제 질문은 이 상황에서 실제로 가능한지 여부입니다. 고려할 가치가있는 다른 접근법이 있습니까?
type FuncType =
| A of (int -> int -> int)
| B
| C
[<ReflectedDefinition>]
let add x y = x + y
let myFunc1 = A (fun x y -> x + y)
let myFunc2 = A add
let thefunc expr =
match expr with
| A(x) ->
<@ x @>
| _ ->
failwith "fail"
printfn "%A" (thefunc myFunc1) // prints "Value (<fun:[email protected]>)"
printfn "%A" (thefunc myFunc2) // prints "Value (<fun:[email protected]>)"
printfn "%A" <@ fun x y -> x + y @> // generates usable expression tree
감사합니다, 그것은이 인용문을 이해하는 데 많은 공백을 메웠고 앞으로 나에게 한 길을 제시해주었습니다. – Jimmy