-6ren">
gpt4 book ai didi

julia - 为什么如果先调用 `show` 则 `show` 重载不起作用?

转载 作者:行者123 更新时间:2023-12-02 04:12:59 28 4
gpt4 key购买 nike

通常

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

这是为什么?

最佳答案

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

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

关于julia - 为什么如果先调用 `show` 则 `show` 重载不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495396/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com