Аргументы предоставленного конструктора FSharp

Я пытаюсь реализовать поставщик типов, используя примеры, которые я нашел в разных местах.

Я хочу иметь возможность создать конструктор, который присваивает предоставленные аргументы нужным свойствам. Результат должен будет сделать то же самое, что и тип ниже.

type SomeType(arg1: int, arg2: string) = 
    member this.Arg1 = arg1
    member this.Arg2 = arg2

Я пробовал разные подходы, но я просто не могу передать первый аргумент в списке аргументов.

ProvidedConstructor(
    parameters = parameters, 
    InvokeCode = (fun args -> ??)

Какой код должен быть вызван для достижения этого. Или мне нужно использовать другой подход?


person BBL    schedule 06.11.2013    source источник


Ответы (1)


Каким будет базовое представление предоставленного вами типа во время выполнения (тип, который вы передали аргументу ProvidedTypeDefinition baseType)? ProvidedConstructor InvokeCode — это функция, которая принимает список выражений и возвращает выражение базового типа. Например, если представление во время выполнения представляет собой кортеж из 2 элементов, InvokeCode будет выглядеть примерно так:

InvokeCode = (fun [arg1;arg2] -> <@@ (%%arg1:int), (%%arg2:string) @@>)

Обязательно прочитайте это руководство.

person Gustavo Guerra    schedule 06.11.2013
comment
Привет Густаво, спасибо за ваш ответ. Что мне было непонятно, так это то, что Expr возвращает базовый тип. - person BBL; 09.11.2013