【发布时间】:2016-04-19 05:33:19
【问题描述】:
在 Julia 中是否可以使用列表推导式来构建复杂的表达式?
例如,假设我有一些符号和类型,并想从它们构建一个类型。现在,我必须做类似的事情。
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 数据类型以便知道,例如元组的数据类型的表达式必须存储在@ 987654325@) 并且非常脆弱,因为对正在构建的表达式的 AST 进行任何更改都意味着必须更改每个子表达式的存储位置/方式。
那么有没有办法做类似的事情
:(type Foo
$(sym::typ for (sym,typ) in zip(syms,typs))
end)
最后得到和上面一样的表达式?
【问题讨论】:
标签: julia