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

Does '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 

Как указывает @ColinTBowers, чтобы сделать это в РЕПЛ вам нужно определить новый метод для Base.show :

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

Мне может быть что-то не хватает, но я не понимаю, зачем нужен модуль. Если вы просто вызываете определение метода с помощью «Base.show ...», вы получаете тот же эффект в REPL. См. Мой комментарий к вопросу. Это работает для меня на v0.5 ... –

+0

@ColinTBowers Вы правы - когда я впервые попробовал это, я пропустил префикс 'Base.'' show() ', и он не работает без него. Я отредактирую свой ответ. – MBaz

+0

Нет проблем. Не стесняйтесь использовать мой комментарий в качестве шаблона для ответа. Я сам не сделал ответа, так как не был на 100% уверен, что правильно понял вопрос. –

Смежные вопросы