如果首先调用`show`,为什么`show`重载不起作用?

时间:2016-02-19 00:52:17

标签: julia

通常

julia> Base.show(io::IO, a::Int) = print(io, "xx")
show (generic function with 98 methods)

julia> show(2)
xx

正确重载。

但是,如果我在重载之前调用show,它不会超载,也不会发出任何警告。

julia> show(1)
1
julia> Base.show(io::IO, a::Int) = print(io, "xx")
show (generic function with 98 methods)

julia> show(2)
2
julia> Base.show(2)
2

为什么?

1 个答案:

答案 0 :(得分:4)

这是一个长期悬而未决的问题#265。 当您致电show(2)时,它会依次调用show(STDIN, 2),但是当您调用show(1)时,这些函数已经被编译,并且由于问题,依赖函数show(::Int)不会重新编译。

当然,在代码中依赖行为后,您很少需要更改行为。一般来说,通过改变已经存在的行为,你不知道如何破坏现有代码,例如Base库。另一方面,为新类型添加行为也很好。

相关问题