No. Apologies. I didn't read the question closely enough.

However, upon closer reading, I cannot see any reason why you need
CIGARString to be a type alias. Wouldn't it make more sense for CIGARString
to also be its own type?

type CIGARString
    x::Vector{CIGAR}
end

I think this would solve all your problems in one hit and you would end up
with something that is more versatile than using a type alias... If you
want to treat an instance of CIGARString like you would any old vector,
then just overload the standard methods, e.g. getindex, setindex!, e.t.c.

On 15 August 2015 at 09:26, Ben Ward <axolotlfan9...@gmail.com> wrote:

> Would that work? The variable to be printed isn't fed in as the second
> option?
>
>
> On Wednesday, August 12, 2015 at 1:34:16 AM UTC+1, colint...@gmail.com
> wrote:
>>
>> 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.
>>>
>>

Reply via email to