2015-01-09 9 views
6

Juliaのパラメトリックタイプは、メモリ内に異なるレイアウトを含むタイプのファミリを実際に定義します。私はこれが複合型のフィールドの名前と数についても機能するのだろうかと思っていましたか?簡単な例は次のようなものになるだろう:Juliaでタイプ定義を特化できますか?

type mytype{Float64} 
    a::Float64 
    b::Float64 
end 

type mytype{Int64} 
    a::Int64 
end 

これは私にmytypeを再定義するためのエラーが発生します。

ここでは、の型パラメータがで、そのうちの1つがInt64だった場合は2つのフィールドが必要です。 (実際は私が望むのはもっと複雑ですが、これは基本的な例です)。上記で抽象的な型と<:などを持つと想像することができます。

これは他の言語では可能ではないかもしれないが、私にとってはコンパイラが関数を特殊化するのと同じように理解できるはずです。結局のところ、実際の(コンパイルされた)コードには具体的な型が含まれ、すべてがコンパイラによって認識されます。 (真のダイナミックタイプの場合、おそらくカプセル化の追加層がこの場合必要でしょうか)

おそらく、同様の結果を達成する別の方法がありますか?

答えて

4

あなたは別に二つのタイプを定義します(mytypeF & mytypeI)と2つの労働組合などの新しいタイプmytypeを定義することができます。そして、実際にどのタイプを受け取ったかを静的に決定できる関数は、要求したとおりに特殊化されます。しかし、私はそれが賢明か、あなたが本当に後になっているかどうかは分かりません。

5

これは現時点では不可能ですが、この機能は、問題#8472の「生成されたタイプ」として投機的に提案されています。セバスチャンの回答は、グループ化されたmytypeコンストラクタが型安定であることに注意する限り、妥当な回避策です。より完全な例については、ImmutableArrays.jlが要約ImmutableArray座の周りのタイプのグループをプログラムによって定義する方法を参照してください。

関連する問題