Size: a a a

Rust — русскоговорящее сообществo

2020 August 30

/

/bin/cat in Rust — русскоговорящее сообществo
можно ли написать макрос, который добавит новый элемент в enum?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
/bin/cat
можно ли написать макрос, который добавит новый элемент в enum?
можно
источник

/

/bin/cat in Rust — русскоговорящее сообществo
а как?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
источник

V

Vladimir in Rust — русскоговорящее сообществo
Макрос не может продюсить часть токенов. Его результатом может быть либо expression, либо item.

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

R

Roman in Rust — русскоговорящее сообществo
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Vladimir
Макрос не может продюсить часть токенов. Его результатом может быть либо expression, либо item.

Другими словами нужно писать макрос аргументом которого будет исходный энам, а результатом энам + вариант
т.е. прям define нельзя написать?
источник

V

Vladimir in Rust — русскоговорящее сообществo
/bin/cat
т.е. прям define нельзя написать?
Вон выше пример как можно. Можно только так, или переделать в процедурный макрос, тогда синтаксис будет

#[macro_name]
enum X{...}

По-другому нельзя. define сишный тоже нельзя (он работает с строками, а не с токенами)
источник

H

Heorhi in Rust — русскоговорящее сообществo
в теории можно намалевать обычный макрос, но проще процедурный
источник

V

Vladimir in Rust — русскоговорящее сообществo
Heorhi
в теории можно намалевать обычный макрос, но проще процедурный
Ну обычный уже скинули даже)
источник

H

Heorhi in Rust — русскоговорящее сообществo
единственный минус, процедурные макросы плохо парсятся аналайзерами
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Vladimir
Вон выше пример как можно. Можно только так, или переделать в процедурный макрос, тогда синтаксис будет

#[macro_name]
enum X{...}

По-другому нельзя. define сишный тоже нельзя (он работает с строками, а не с токенами)
Разве процедурный макрос имеет право мутировать токены?
источник

V

Vladimir in Rust — русскоговорящее сообществo
/bin/cat
Разве процедурный макрос имеет право мутировать токены?
Который не декоратор (derive) вроде как должен уметь (иначе б какой был в нем смысл?)
источник

/

/bin/cat in Rust — русскоговорящее сообществo
А есть showcase какой-нибудь
источник

R

Roman in Rust — русскоговорящее сообществo
Да, proc-macro заменяет токены. А derive дополняет
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Можно ли хаком сделать изменение в derive?
источник

R

Roman in Rust — русскоговорящее сообществo
А зачем?
источник

R

Roman in Rust — русскоговорящее сообществo
proc-macro стабильные уже
источник

V

Vladimir in Rust — русскоговорящее сообществo
/bin/cat
Можно ли хаком сделать изменение в derive?
Нет, у него интерфейс другой. Токены остаются на месте, добавляются разные другие итемы. Типа impl блока, или другой структуры
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Vladimir
Нет, у него интерфейс другой. Токены остаются на месте, добавляются разные другие итемы. Типа impl блока, или другой структуры
А что если он раскроется в атрибут для вызова обычного процмакроса?
источник