Я хотел бы написать макрос, который позволит мне выполнять некоторые операции с каждым атрибутом записи, например десериализовать строку CSV в экземпляр записи с правильным приведением типов. С чего мне начать?
Отражение времени компиляции над членами типа
Ответы (1)
Это очень широкий вопрос. Я отвечу на два разных вопроса.
Как избежать дублирования кода с помощью макросов?
Просто используйте петлю!
numbers = [5, 3, 2, 1]
{% for operator in [:*, :+, :/, :-] %}
numbers.map! {|number| number {{operator.id}} 23 }
{% end %}
p numbers
[-17, -19, -20, -21]
Как я могу получить список всех переменных экземпляра определенного типа во время компиляции?
Через TypeNode#instance_vars
!
struct Bag
property has_wallet : Bool = false
property has_bottle : Bool = false
property has_keys : Bool = false
end
def fill_bag(bag)
{% for name in Bag.instance_vars %}
bag.{{name.id}} = true
{% end %}
bag
end
p fill_bag(Bag.new)
Bag(@has_wallet=true, @has_bottle=true, @has_keys=true)
person
Jonne Haß
schedule
10.06.2019