2017-02-09 3 views
3
type MyCompositeType 
    x::Float64 
    y::Int 
end 

z = MyCompositeType(1.0,2) 

私はジュリアで標準のショーや表示方法をご希望のことをしないだけで、表示/表示z.xが、オーバーライドdisplay(x::MyCompositeType)に上書きされるように、そして私のタイプのフィールドであることをMIMEタイプの紹介が見つかりません。オーバーライド `show`は

モジュールを使用して
+0

'Base.show(io :: IO、a :: MyCompositeType)= print(io、string(a.x))は何をしますか?もっと読む[ここ](http://stackoverflow.com/questions/40066212/julia-does-not-appear-to-be-using-string-to-perform-interpolation)... –

答えて

1

一部のコンポーネントと同じようにタイプを表示したい場合は、 showを他のタイプに転送します。

julia> type MyType 
      obj::Vector{Int} 
      other::Float64 
     end 

julia> Base.show(io::IO, x::MyType) = show(io, x.obj) 

julia> Base.show(io::IO, m::MIME"text/plain", x::MyType) = show(io, m, x.obj) 

julia> MyType([1, 2, 3], 1.5) 
3-element Array{Int64,1}: 
1 
2 
3 

julia> println(MyType([1, 2, 3], 1.5)) 
[1, 2, 3] 
0

例:

module m 

import Base.show 

export MyCompositeType 

type MyCompositeType 
    x::Float64 
    y::Int 
end 

function show(io::IO, v::MyCompositeType) 
    println(io,"The x field is $(v.x)") 
end 

end 

、あなたは

julia> using m 

julia> z = MyCompositeType(1.0,2) 
The x field is 1.0 

としては、あなたがBase.showのための新しい方法を定義する必要がREPLでこれを行うために、@ColinTBowersによって指摘行うことができます:

Base.show(io::IO, v::MyCompositeType) = println(io,"The x field is $(v.x)") 
+0

私は何かが不足している可能性があります、私はモジュールがなぜ必要なのか分かりません。 'Base.show ... 'でメソッド定義を呼び出すだけなら、REPLでも同じ効果が得られます。質問に対する私のコメントを参照してください。それはv0.5で私のために働いています... –

+0

@ColinTBowersあなたが正しいです - 私が最初に試したとき、私は 'show()'への 'Base.'プリフィックスを見逃して、それなしで動作しません。私は私の答えを編集します。 – MBaz

+0

probsはありません。私のコメントを答えのテンプレートとして自由に使用してください。私は質問を正しく理解していると100%確信していないので、私自身は答えをしなかった。 –