Возможно ли иметь что-то вроде понимания списка для создания сложных выражений в Джулии?Расширение списка-понимания как выражение внутри выражения Юлии?
Например, скажем, у меня есть некоторые символы и типы, и вы хотите создать из них тип. Прямо сейчас, я должен сделать что-то вроде.
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)]
Это работает в этом new_type
является выражение, содержащее
:(type Foo
a::Int64
b::Float32
c::Char
end)
Но строят сложные выражения, как это и чрезвычайно подвержен ошибкам (потому что вы должны быть тесно осведомлены с типом Expr
данных для того, чтобы знать, , например, что выражения для типов данных кортежа должны быть сохранены в new_type.args[3].args
), а также чрезвычайно хрупкие, так как любое изменение AST в выражении, которое будет построено, будет означать, что нужно изменить, где/как хранится каждое подвыражение.
Так есть ли способ сделать что-то вроде
:(type Foo
$(sym::typ for (sym,typ) in zip(syms,typs))
end)
и в конечном итоге с тем же выражением, как указано выше?
Спасибо, я думаю, что я был на правильном пути, просто не мог получить правильный синтаксис. –