Czy można mieć coś w rodzaju rozumienia listy do budowania skomplikowanych wyrażeń w Julia?Ekspansja podobna do listy w wyrażeniu Julia?
Na przykład powiedz, że mam pewne symbole i typy i chcę zbudować z nich typ. Teraz muszę coś zrobić.
syms = [:a, :b, :c]
typs = [Int, Float32, Char]
new_type = :(type Foo end)
new_type.args[3].args = [:($sym::$typ) for (sym,typ) in zip(syms,typs)]
Działa to w tym new_type
jest wyrazem zawierający
:(type Foo
a::Int64
b::Float32
c::Char
end)
Ale rozbudowanych wyrażeń jak to jest zarówno niezwykle podatny na błędy (bo trzeba być ściśle wiedzę z typem Expr
danych w celu poznania , np. że wyrażenia dla typów danych krotki muszą być przechowywane w new_type.args[3].args
), a także bardzo kruche pod względem tego, że każda zmiana w AST budowanej ekspresji będzie oznaczać konieczność zmiany gdzie/jak przechowywane jest każde podekspresję.
Więc czy jest jakiś sposób, aby zrobić coś podobnego
:(type Foo
$(sym::typ for (sym,typ) in zip(syms,typs))
end)
i skończyć z tym samym wyrazem jak powyżej?
Dzięki, myślę, że jestem na dobrej drodze, po prostu nie mógł uzyskać prawo składni. –