2016-04-19 1 views
5

ジュリアの複雑な表現を構築するためのリストの理解のようなものはありますか?ジュリア式の中にリスト理解のような展開?

たとえば、いくつかのシンボルと型があり、それらから型を作成したいとします。今、私は何かのようにする必要があります。あなたが知るためにExprデータ型と密接に知識が持っているので、これは(両方とも非常にエラーが発生しやすくなりますように。これは、そのnew_typeで動作

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)] 

:(type Foo 
    a::Int64 
    b::Float32 
    c::Char 
end) 

しかし、建物の複雑な式を含む式であります例えば、タプルのデータ型の式をnew_type.args[3].argsに格納する必要があります)また、構築されている式のASTを変更すると、すべての部分式が格納されている場所や方法を変更する必要があるという点で非常に脆弱です。

ので

:(type Foo 
    $(sym::typ for (sym,typ) in zip(syms,typs)) 
end) 

ような何かをし、上記と同様の表現で終わるする方法はありますか?

答えて

5

はい、あなたは直接構文に表現のスプラット配列することができます、私はちょうど構文の権利を得ることができなかった、正しい軌道に乗っていた

julia> :(type Foo 
      $([:($sym::$typ) for (sym,typ) in zip(syms,typs)]...) 
     end) 
:(type Foo # none, line 2: 
     a::Int64 
     b::Float32 
     c::Char 
    end) 
+0

おかげだと思います。 –

関連する問題