Adh*_*ham 7 read-eval-print-loop julia
假设您在Julia中定义了一个新的复合类型以及该类型的变量:
type MyType
?::Int64
?::Vector{Float64}
?::Float64
MyType(?::Int64, ?::Vector{Float64}, ?::Float64) = new(?, ?, ?)
end
mt = MyType(5, [1.2, 4.1, 2], 0.2)
Run Code Online (Sandbox Code Playgroud)
现在,如果您处于REPL模式,只需mt
输入mt
并按Enter 即可查看值:
mt
MyType(5,[1.2,4.1,2.0],0.2)
Run Code Online (Sandbox Code Playgroud)
如果我想自定义MyType
显示变量的方式,我可以定义一个函数并使用它customized_display(mt)
:
function customized_display(me::MyType)
println("MyType")
println("?:$(me.?), ?:$(me.?), ?:$(me.?)")
end
customized_display(mt)
MyType
?:5, ?:[1.2,4.1,2.0], ?:0.2
Run Code Online (Sandbox Code Playgroud)
但是使用另一个显示值的函数mt
似乎是多余的.我需要扩展哪个功能,只需输入mt
,就会显示自定义显示?
注意:从Julia 0.5及更高版本开始,spencerlyon2的答案不再正确.
鉴于你的类型
type MyType
?::Int64
?::Vector{Float64}
?::Float64
end
Run Code Online (Sandbox Code Playgroud)
如果要自定义单行显示,请添加如下方法Base.show
:
function Base.show(io::IO, me::MyType)
print(io, "MyType: ?:", me.?, " ?:", me.?, " ?:", me.?)
end
Run Code Online (Sandbox Code Playgroud)
使用单行显示的示例:
julia> [MyType(5, [1.2, 4.1, 2], 0.2)]
1-element Array{MyType,1}:
MyType: ?:5 ?:[1.2, 4.1, 2.0] ?:0.2
Run Code Online (Sandbox Code Playgroud)
按照惯例,这种方法应该不包含任何新行.这样可以在嵌入其他对象(如数组或矩阵)时很好地显示.通常,最好将可以解析和评估的内容输出到与所显示的对象相等的对象中,但这不是一个严格的规则.
如果要自定义多行显示,请添加如下方法Base.show
:
function Base.show(io::IO, ::MIME"text/plain", me::MyType)
println(io, "MyType")
print(io, "?:", me.?, " ?:", me.?, " ?:", me.?)
end
Run Code Online (Sandbox Code Playgroud)
请注意,如果不包含此方法,则将使用单行显示.当您的对象单独显示时,在REPL中使用多行显示:
julia> MyType(5, [1.2, 4.1, 2], 0.2)
MyType
?:5 ?:[1.2, 4.1, 2.0] ?:0.2
Run Code Online (Sandbox Code Playgroud)
按照惯例,多行显示不应打印任何尾随的新行.
你应该定义一个如下的(他们都将工作和有同样的效果):
function Base.show(io::IO, me::MyType)
println(io, "MyType")
println(io, "?:$(me.?), ?:$(me.?), ?:$(me.?)")
end
function Base.writemime(io::IO, ::MIME"text/plain", me::MyType)
println(io, "MyType")
println(io, "?:$(me.?), ?:$(me.?), ?:$(me.?)")
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
208 次 |
最近记录: |