Вопросы по теме 'hygiene'

Почему этот макрос Джулии _не_ требует `esc`?
Я нашел пример макроса unless в Джулии здесь , написанный как следует: macro unless(test, branch) quote if !$test $branch end end end Однако, когда я пытаюсь использовать его, он терпит неудачу (видимо, есть проблема с...
211 просмотров
schedule 23.06.2022

Как сделать часть макроса гигиеничной
Я хотел бы иметь версию lambda под названием lambda-r , из которой можно return . Пример: (+ ((lambda-r () (return 1) 2)) 5) Это даст значение 6 . Хотя вы могли бы ожидать, что значение будет равно 7, оно равно 6, поскольку 1...
263 просмотров
schedule 27.07.2022

Почему макрогигиена не предотвращает коллизии между несколькими определениями констант?
Я думал, что «гигиена» предотвратит коллизии между X , определенными в моем макросе m! , но это оказалось не так. Что я неправильно понимаю? macro_rules! m { ($e:expr) => { const X: i32 = $e; }; } m!(0); m!(1); fn main() {...
310 просмотров
schedule 17.09.2022

Правила синтаксиса схемы — разница в связывании переменных между (let) и (define)
В спецификации R 5 RS указано, что в рамках требований к макросу, определенному с помощью syntax-rules : Если преобразователь макроса вставляет свободную ссылку на идентификатор, ссылка ссылается на привязку, которая была видна там, где был...
398 просмотров
schedule 29.09.2022

Написание макроса myletstar (гигиены) на схеме
Я пытаюсь переписать let* макрос гигиены, он у меня как обычный макрос, и я бы хотел, чтобы он был макросом гигиены, если это возможно. У меня нет большого опыта работы с этими типами макросов. Так что я был бы очень признателен за помощь. Также...
100 просмотров
schedule 29.09.2022

Почему грязная инъекция необходима даже для кода в рамках шаблона?
Пожалуйста, обратите внимание на следующее: import options template tpl[T](a: untyped) : Option[T] = var b {.inject.}: T = 4 a none(int) discard tpl[int]: echo b Это строит и запускает и приводит к выводу: 4 Но если...
171 просмотров
schedule 18.07.2023

Передача макропеременной в функцию для интерполяции
Я пытаюсь написать макрос, который оценивает выражение, а затем сравнивает его с несколькими значениями. Я уменьшил проблему до меньшего примера для этого поста. macro small_bad(item) quote $(use_val(esc(item))) end end function...
50 просмотров
schedule 16.01.2023

Вызов макроса против среды определения макроса в Julia
Я пытаюсь понять смысл утверждения в документации по метапрограммированию Джулии на макросигиена . В документации утверждается, что Макроэкспандер Джулии решает эти проблемы следующим образом. Во-первых, переменные в результате макроса...
676 просмотров
schedule 15.01.2024