@show
делает что-то очень простое: печатает выражение, затем =
, затем значение выражения. Если вам нужно другое поведение, вы, вероятно, должны определить свой собственный макрос. Если вы хотите контролировать, как значение печатается справа, вы должны расширить Base.show
. При расширении Base.show
очень важно , что первым аргументом является буфер ввода-вывода (например, io::IO
), и что ваш метод выполняет запись в этот буфер ввода-вывода. Вот чего не хватает в вашем примере. Это работает:
julia> struct Friendly
x::String
end
julia> Base.show(io::IO, f::Friendly) = print(io, f.x, " :)")
julia> f = Friendly("Hi")
Hi :)
julia> @show f;
f = Hi :)
Обратите внимание, что обновленный метод Base.show
теперь также приводит к "красивой печати", когда значение печатается в Julia REPL:
julia> f = Friendly("Hi")
Hi :)