struct - 显示/println/etc 结构 julia jupyter
问题描述
我正在尝试为 Julia 结构创建一个专门的漂亮打印函数,该函数将以所需的方式输出到 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)。我敢肯定这很简单,但我显然只是错过了一些东西
解决方案
虽然@François Févotte 已经回答了这个问题,但请注意,值得使用该Parameters
包来获得漂亮的struct
打印效果。它可能适合您的需要或不适合您,但值得了解。
使用此短代码作为指导。
julia> using Parameters
julia> struct S1
x::Int
b::String
end
julia> @with_kw struct S2
x::Int
b::String
end
S2
julia> S1(5, "Hello")
S1(5, "Hello")
julia> S2(5, "Hello")
S2
x: Int64 5
b: String "Hello"
推荐阅读
- python - ValueError:无法为具有形状“(60000,1)”的张量“Placeholder_1:0”提供形状(60000,)的值
- android - 无法在此 Flutter 应用中释放 appBundle 导致 AndroidX 不兼容
- html - Bootstrap 4 modal-body bg-color 带宽度的恼人错误
- django - 如果从外部删除个人资料图片,如何将其恢复为“默认”?
- java - 使用 SharedPrefernces 对 RecyclerView 中的整数求和
- javascript - 是否可以在箭头函数中获取 this 以及全局 this?
- laravel-5 - 如何在 laravel 和两个模块中设置 Auth
- c++ - 在同一个 Visual Studio 项目中链接静态和动态库
- ios - 在 SwiftUI 中使用十六进制颜色
- flutter - 如何将 Stack 作为 CustomScrollView 的子项