覆盖`show`是一个类型的字段

时间:2017-02-09 01:51:30

标签: types julia

type MyCompositeType
  x::Float64
  y::Int
end

z = MyCompositeType(1.0,2)

我希望将Julia中的标准显示和显示方法覆盖为仅显示/显示z.x,但是覆盖display(x::MyCompositeType)并不会这样做,我无法做到找到MIME类型的介绍。

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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

正如@ColinTBowers所指出的,要在REPL中执行此操作,您需要为Base.show定义一种新方法:

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