I have defined a simple subtype of AbstractArray which keeps track if an array has been modified by the user. Base.show, Base.showcompact, and Base.display are overloaded. This works in the REPL, but with Atom I receive the following error.
Julia Client - Internal Error
MethodError: no method matching print_matrix(::IOContext{Base.AbstractIOBuffer{Array{UInt8,1}}}, ::LTspice.IsModifiedArray{Float64,1}, ::String, ::String, ::String)
Closest candidates are:
print_matrix(::IO, !Matched::Union{AbstractArray{T,1},AbstractArray{T,2}}, ::AbstractString, ::AbstractString, ::AbstractString) at show.jl:1379
print_matrix(::IO, !Matched::Union{AbstractArray{T,1},AbstractArray{T,2}}, ::AbstractString, ::AbstractString, ::AbstractString, !Matched::AbstractString) at show.jl:1379
print_matrix(::IO, !Matched::Union{AbstractArray{T,1},AbstractArray{T,2}}, ::AbstractString, ::AbstractString, ::AbstractString, !Matched::AbstractString, !Matched::AbstractString) at show.jl:1379
...
in #showarray#330(::Bool, ::Function, ::IOContext{Base.AbstractIOBuffer{Array{UInt8,1}}}, ::LTspice.IsModifiedArray{Float64,1}, ::Bool) at .\show.jl:1618
in verbose_show(::Base.AbstractIOBuffer{Array{UInt8,1}}, ::MIME{Symbol("text/plain")}, ::LTspice.IsModifiedArray{Float64,1}) at .\multimedia.jl:50
in #sprint#304(::Void, ::Function, ::Int64, ::Function, ::MIME{Symbol("text/plain")}, ::Vararg{Any,N}) at .\strings\io.jl:37
in Type at C:\Users\Chris\.julia\v0.5\Juno\src\types.jl:48 [inlined]
in Type at C:\Users\Chris\.julia\v0.5\Juno\src\types.jl:49 [inlined]
in render(::Juno.Editor, ::LTspice.IsModifiedArray{Float64,1}) at C:\Users\Chris\.julia\v0.5\Juno\src\types.jl:12
in (::Atom.##81#84)(::Dict{String,Any}) at C:\Users\Chris\.julia\v0.5\Atom\src\eval.jl:64
in handlemsg(::Dict{String,Any}, ::Dict{String,Any}, ::Vararg{Dict{String,Any},N}) at C:\Users\Chris\.julia\v0.5\Atom\src\comm.jl:148
in (::Atom.##7#10)() at .\event.jl:68
What do I need to overload to fix this?
Code below:
abstract SpecialArray <: AbstractArray
Base.size(a::SpecialArray) = size(a.values)
Base.linearindexing{T<:SpecialArray}(::Type{T}) = Base.LinearFast()
Base.getindex(a::SpecialArray, i::Int) = a.values[i]
Base.ndims(a::SpecialArray) = ndims(a.values)
Base.show(io::IO, a::SpecialArray) = show(io,a.values)
Base.showcompact(io::IO, a::SpecialArray) = showcompact(io,a.values)
Base.display(a::SpecialArray) = display(a.values)
"""
Same as Array, but tracks is user has modified values.
"""
type IsModifiedArray{T,S} <: SpecialArray
values :: Array{T,S}
ismodified :: Bool
end
function Base.setindex!(a::IsModifiedArray, v, i::Int)
a.ismodified = true
a.values[i] = v
end
a = IsModifiedArray{Float64,1}([1.0,2.0,3.0],false) # error here