gpt4 book ai didi

struct - 显示/打印/等结构 julia jupyter

转载 作者:行者123 更新时间:2023-12-04 13:32:06 24 4
gpt4 key购买 nike

我正在尝试为 Julia 结构创建一个专门的 pretty-print 函数,该函数将以所需的方式输出到 Jupyter nb。如果我只是将结构之一作为 nb 帧的结果,我的专业表演显然可以工作,但如果我在代码中调用 show 则不行:

using Printf
struct foo
bar
end
show(io::IO, ::MIME"text/plain", f::foo) = @printf(io, "A Foo with Bar=%s!!!",f.bar)
f1=foo(1234)
show(f1) # A
f1 # B
输出(添加了 # 条评论):
foo(1234)                    # This comes from the inline show (A)
A Foo with Bar=1234!!! # This is the result that's just blatted out from the eval (B)
我已经尝试了很多版本——导入和覆盖 Base.show,使用 print 和 println 而不是 show,以及导入/覆盖这些,等等。许多版本都像上面一样工作。有些以各种可预测的方式中断,但我尝试过的任何组合都无法让我通过我的专用 fn 输出到 nb 流中(即,我希望 #A 看起来像 #B)。我确定这很简单,但我显然只是遗漏了一些东西

最佳答案

您发布的代码中有两个问题:

  • 为了延长show函数来自 Base ,你应该明确说明它:要么 import Base: show或明确定义您的方法 Base.show
  • 而(作为开发人员)show是扩展新类型的好功能,您(作为用户)仍然应该使用 display来显示值。

  • 修复这些 yield :
    using Printf
    struct foo
    bar
    end

    # Explicitly extend Base.show to tell how foo should be displayed
    Base.show(io::IO, ::MIME"text/plain", f::foo) = @printf(io, "A Foo with Bar=%s!!!",f.bar)

    f1=foo(1234)

    # Call display to actually display a foo
    display(f1) # -> A Foo with Bar=1234!!! (printed on stdout)
    f1 # -> A Foo with Bar=1234!!! (displayed as output)

    关于struct - 显示/打印/等结构 julia jupyter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64502931/

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