Show() and sisters


#1

Hi, here is my code :

julia> using Primes

julia> f=factor(binomial(30,12))
3 ⋅ 5^2 ⋅ 7 ⋅ 13 ⋅ 19 ⋅ 23 ⋅ 29

julia> repr(f)
"Primes.Factorization(3=>1,5=>2,7=>1,13=>1,19=>1,23=>1,29=>1)"

julia> string(f)
"Primes.Factorization(3=>1,5=>2,7=>1,13=>1,19=>1,23=>1,29=>1)"

Primes.Factorization has a nice show() method, but how to build a string from this representation ?


#3
julia> reprmime("text/plain", f)
"3 ⋅ 5^2 ⋅ 7 ⋅ 13 ⋅ 19 ⋅ 23 ⋅ 29"

#4

Wow, thank you a lot, this function is well hidden in the doc !


#5

I did not find it from the docs, if you ?repr it shows up in the search.


#6

You’re right, but I used the doc, where repr and string are in
https://docs.julialang.org/en/stable/stdlib/strings/ (that looks fine :-),
whereas reprmime and stringmime are in
https://docs.julialang.org/en/stable/stdlib/io-network/ .

Anyway imho repr should be the good answer.


#7

repr is equivalent to show(io, x), whereas reprmime (documented here) is equivalent to show(io, mime, x). The latter defaults to the former for text/plain, but it is sometimes desirable to distinguish the two, as described here: https://docs.julialang.org/en/stable/manual/types/#Custom-pretty-printing-1

Usually, you want repr(x) to be a form that you could use to enter the same object, i.e. includestring(repr(x)) should usually work. Whereas the text/plain version might be a more pretty-printed output that is designed for human consumption, not computer parsing.

That being said, I suspect that we should rename reprmime(mime, x) to repr(mime, x), just as writemime(io, mime, x) was renamed to show(io, mime, x).