169 похожих чатов

Добрый день. В Argu есть такой код, который позволяет писать

код вида

type Foo = Bar of int

let number: int = result.GetResult Bar

В number положится число которое было в Bar. Прикол в том что компилятор автоматом выдаёт quotation вместо Bar, как будто я написал <@ Bar @>.

Вопрос: Чтобы у меня такое заработало, я должен положить функцию в класс и аргумент пометить ReflectedDefinition?

Просто если написать так
let doMagic ([<ReflectedDefinition>]expr: Expr) = .....


doMagic Bar // Type `int -> Foo` is not compatible with Expr

А если написать так

type Magic () =

static member doMagic ([<ReflectedDefinition>] expr: Expr) = .....

Magic.doMagic Bar // <— компилятор автоматом тут выдаёт expr

4 ответов

11 просмотров
Gradi- Автор вопроса

Иначе говоря, как достигнуть поведения как в C#, когда C# автоматом создаёт ExpressionTree при вызове функции принимающей ExpressionTree?

Gradi
Иначе говоря, как достигнуть поведения как в C#, к...

Не могу ответить на вопрос. Но вообще в примере используется Expr<'a>, а не Expr. Вполне возможно, что компилятор заточен только под конкретные типы. Которые в примере ещё и определены на уровне ParsedResult, а не конкретного метода. Т.е. ограничены контекстом, на который компилятор может опереться при необходимости.

Gradi- Автор вопроса
Klei
Не могу ответить на вопрос. Но вообще в примере ис...

На самом деле нужно просто положить функцию в класс и тогда будет работать как задумано. Я просто не понимаю, почему не работает на функциях вне класса(модули), как в моём примере

Gradi
На самом деле нужно просто положить функцию в клас...

Ок. Я не так прочёл первое сообщение, Щас врубился, но по основному вопросу ничего сказать не могу.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта