为什么show()在Julia中的行为不一致?
我在Julia中的为什么show()在Julia中的行为不一致?,julia,Julia,我在Julia中的show中有不一致的行为,这取决于是显式调用还是从REPL调用。我可以重载的方法是什么,以便始终看到相同的输出 具体而言,我定义了一种新类型: immutable Rigid3D{T<:Real} rotation::ImmutableArrays.Matrix3x3{T} translation::ImmutableArrays.Vector3{T} end 当REPL显示我的函数时,我得到旋转矩阵的某种类型的输出,如下所示 RigidTransfor
show
中有不一致的行为,这取决于是显式调用还是从REPL调用。我可以重载的方法是什么,以便始终看到相同的输出
具体而言,我定义了一种新类型:
immutable Rigid3D{T<:Real}
rotation::ImmutableArrays.Matrix3x3{T}
translation::ImmutableArrays.Vector3{T}
end
当REPL显示我的函数时,我得到旋转矩阵的某种类型的输出,如下所示
RigidTransforms.Rigid3D{Float64}
- rotation:
3x3 ImmutableArrays.Matrix3x3{Float64}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
- translation:
[0.0,0.0,0.0]
当我通过明确调用show
或print
或类似命令来获得我真正想要的东西时:
RigidTransforms.Rigid3D{Float64}
- rotation:
[1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0]
- translation:
[0.0,0.0,0.0]
似乎
showarray
/show
因为数组中加入了一些额外的超级特殊全局变量“goodness”。可以通过显式设置一些标志来获得我想要的输出,如
Base.showarray(io,trans.rotation,header=false,repr=true)
后续问题:这是一种很好的方法吗?的Julia Doc包含有关多媒体I/O的相关主题,请参阅本节,创建对象输出的最高级api是display()
函数,因此直接调用display()
的任何地方都可以创建标准输出:
julia> r=rand(1:10,3,4)
3x4 Array{Int64,2}:
1 9 6 10
10 4 9 3
2 7 9 3
julia> display(r)
3x4 Array{Int64,2}:
6 9 10 6
7 10 3 8
10 3 1 3
创建对象输出表示的下一个步骤是writemime()
函数,通常该函数由display()
使用合适的IO
和MIME
类型调用。(检查来源:)因此,创建相同输出的另一种方法是调用
writemime()
:
最后一个轮胎是show()
函数,请参见writemime()
如何利用它的不同实现来创建对象表示。e、 g.被调用以输出
数组的视图的“text/plain”
如下所示:
showarray(IOContext(io,:limit\u output=>true),v,header=true,repr=false)
但是,从源代码中可以看到,writemime()
使用IOContext
类型自定义输出,因此上述内容并不完全相同。要查看差异,请比较兰德(Int,4,5)
的输出:
据我所知,show
仍然是重载的正确方法,事实上,对于您自己的类型,您已经正确地重载了show
似乎发生的情况是,show
对于ImmutableArrays
包中的类型工作不正常(?)。由于您没有提供工作代码,我无法创建您类型的对象并进行彻底测试
请注意,包FixedSizeArrays
是ImmutableArrays
的替代品,现在可以使用了。你能测试一下当你使用这个软件包时会发生什么吗
julia> r=rand(1:10,3,4)
3x4 Array{Int64,2}:
1 9 6 10
10 4 9 3
2 7 9 3
julia> display(r)
3x4 Array{Int64,2}:
6 9 10 6
7 10 3 8
10 3 1 3
julia> writemime(STDOUT,"text/plain",r)
3x4 Array{Int64,2}:
6 9 10 6
7 10 3 8
10 3 1 3
julia> Base.showarray(STDOUT, r, header=true, repr=false)
3x4 Array{Int64,2}:
6 9 10 6
7 10 3 8
10 3 1 3
julia> r=rand(Int,4,5);
julia> Base.showarray(STDOUT, r, header=true, repr=false);
4x5 Array{Int64,2}:
-9150711412447851532 -4064307792165254874 -9145005121012096632 877869689862
3596311 -1624484174873216444
-6072167451473199347 3776198281339796836 2251800342396330066 278057847557
1491665 -3073806755949099776
-6526051806709869625 -1478837742375450002 -4067570915681650210 818574986937
5316317 -5612815197244826930
3274244289756062731 2761828107403369455 1969450819804018106 -130408388331
4107544 6697765697249990460
julia> r
4x5 Array{Int64,2}:
-9150711412447851532 -4064307792165254874 . -1624484174873216444
-6072167451473199347 3776198281339796836 -3073806755949099776
-6526051806709869625 -1478837742375450002 -5612815197244826930
3274244289756062731 2761828107403369455 6697765697249990460