I did debate doing this, but went with the typealias as, the way I understood it, CIGARString would be a variable containing a reference, to a vector or CIGARS. When in my mind, where a String is thought of as the array of chars, so it should be with CIGARString, it is the array of CIGARS.
I should mention I had failed in the past to provide my own show methods for arrays containing some types, which is - at the heart of the matter - what I'm trying to do; create my own show method for and array of CIGARs. I solved this problem with the addition of a write mime method. This solution was thanks to the wonderful D.C. Jones': function writemime(io::IO, ::MIME{symbol("text/plain")}, cs::CIGARString) show(io, cs) end On Monday, August 17, 2015 at 12:25:44 AM UTC+1, Colin Bowers wrote: > > 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 <axolotl...@gmail.com <javascript:>> > 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. >>>> >>> >