When overwriting Base.show for an Array of custom_type REPL eval() uses the 
old version of Base.show with only partial delegation/dispatch;  which is 
cumbersome when working with large arrays of records in REPL.

Is this the expected behaviour, and there is a different approach to use 
REPL + eval + show  or some sort of a exception I happened to stumble upon?
any pointer/help is appreciated.

[I am aware when wrapping arrays again in an object this can be avoided, 
but that requires implementing/dispatching methods Array{}() already has ]

short self contained minimal example attached
thanks,
steve

 ------------------- CODE ---------------
#!/usr/local/bin/julia

# minimal working example to demonstrate that one is 
# unable to overwrite Base.show for Array{custom_type,1} when using REPL
#
# julia> versioninfo()
# Julia Version 0.4.0-dev+2895
# Commit a37025e* (2015-01-25 09:20 UTC)
#Platform Info:
#  System: Linux (x86_64-linux-gnu)
#  CPU: Intel(R) Core(TM) i7-3667U CPU @ 2.00GHz
#  WORD_SIZE: 64
#  BLAS: libmkl_rt
#  LAPACK: libmkl_rt
#  LIBM: libimf
#  LLVM: libLLVM-3.3
#

module repl_test  
    import Base.show
    export show
    
    type A
        value::Int64
    end

    show( io::IO, x::A ) = @printf(" A: %i\n", x.value )
    show( io::IO, x::Array{A,1} ) = @printf(" A: many values\n" )
end


x = repl_test.A( 5 )
show(x)  # as advertised
x             # same as above
# printout in  REPL
# A: 5
# A: many values

y = Array(repl_test.A, 10)
show(y) 
# still works as expected
# julia> show(y)
# A: many values

###### like io::IO, x::Array{A,1} = ... didn't exist
y
# julia> y
# 10-element Array{repl_test.A,1}:
#  #undef
#  ... omitted 
#  #undef

# The above code when evaluated in REPL uses built in Base.show for array 
and indirectly 
# calls overwritten Base.show 
# I find it very cumbersome and unfriendly when unable to pretty print 
large arrays of structs 
# imported from other systems. 

# Is there a better/working solution to use the REPL similarly to when 
interacting with GNU R?

Attachment: repl_show_test.jl
Description: Binary data

Reply via email to