Does the following work?
function Base.show(io::IO, ::Type{CIGARString})
#your code here
end
On Tuesday, 11 August 2015 03:07:15 UTC+10, Ben Ward wrote:
>
> Hi, I have implemented a basic immutable type with a type alias for a
> vector of said type:
>
> immutable CIGAR
> OP::Operation
> Size::Int
> end
>
>
> function CIGAR(op::Char, size::Int)
> return CIGAR(Operation(op), size)
> end
>
>
> function convert(::Type{String}, cigar::CIGAR)
> return "$(cigar.Size)$(Char(cigar.OP))"
> end
>
>
> function show(io::IO, cigar::CIGAR)
> write(io, convert(String, cigar))
> end
>
>
> typealias CIGARString Vector{CIGAR}
>
>
> function convert(::Type{CIGARString}, str::String)
> matches = matchall(r"(\d+)(\w)", str)
> cigarString = Vector{CIGAR}(length(matches))
> @inbounds for i in 1:length(matches)
> m = matches[i]
> cigarString[i] = CIGAR(m[end], parse(Int, m[1:end-1]))
> end
> return cigarString
> end
>
>
> macro cigar_str(str)
> return CIGARString(str)
> end
>
> I also want to define a show method for the alias CIGARString, so as it is
> converted to a string that can be used with a show method:
>
> function convert(::Type{String}, cigarString::CIGARString)
> outString = ""
> for cigar in cigarString
> outString *= String(cigar)
> end
> return outString
> end
>
>
> function show(io::IO, cigarstr::CIGARString)
> write(io, convert(String, cigarstr))
> end
>
> However the output a see on the REPL is:
>
> *3-element Array{Bio.Align.CIGAR,1}:*
>
> * 5M*
>
> * 5N*
>
> * 5M*
>
> So, rather than the show method for CIGARString being called, the show
> method for CIGAR is being called repeatedly for every element in the
> CIGARString vector. How do I get Julia to use the show method I want for
> CIGARString?
>
> Thanks.
>