通常
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
为什么?
答案 0 :(得分:4)
这是一个长期悬而未决的问题#265。
当您致电show(2)
时,它会依次调用show(STDIN, 2)
,但是当您调用show(1)
时,这些函数已经被编译,并且由于问题,依赖函数show(::Int)
不会重新编译。
当然,在代码中依赖行为后,您很少需要更改行为。一般来说,通过改变已经存在的行为,你不知道如何破坏现有代码,例如Base
库。另一方面,为新类型添加行为也很好。