gpt4 book ai didi

自己类型的 julia 插值与 string()

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

我是 Julia 的新手,我正在研究将一些 Python 代码移植到 Julia。此代码使用 __repr__() 重载来显示 cutsom 类型。我知道 Julia 为这个功能提供了 string() 方法。但我想不通。

julia> type Thomas
t::Integer
end
julia> function Base.string(t::Thomas)
"---> $(t.t) <---"
end
julia> r = Thomas(8);

根据这些定义,我希望在需要将 Thomas 类型的值转换为字符串时调用我的 string(::Thomas) 函数。在一种情况下,它按预期工作:

julia> println("$r")
---> 8 <---

但是,在大多数情况下,它不会:

julia> println(r)
Thomas(8)

julia> println(" $r")
Thomas(8)

julia> println("r = $r")
r = Thomas(8)

julia> repr(r)
"Thomas(8)"

我做错了什么?我应该为我的新自定义类型定义一些其他功能吗?

我正在运行 Julia 0.4.0-dev。 (上面的代码是从版本 0.4.0-dev+3607 (2015-02-26 07:41 UTC) 的 REPL 中粘贴过来的,Commit bef6bf3*, x86_64-linux-gnu)

最佳答案

目前只需覆盖 Base.show 就足够了,如下所示。

type Thomas
t::Int # note Int not Integer
end

Base.show(io::IO, x::Thomas) = print(io, "Thomas with $(x.t)")

请注意,在类型的定义中,您应该使用具体类型Int(相当于Int64Int32,具体取决于您的machine's word size),而不是抽象类型Integer,这会导致性能不佳。

目前 Base.showBase.print 等的情况确实令人困惑,但最近的一些工作(查找 IOContext) 应该很快得到简化和澄清。

关于自己类型的 julia 插值与 string(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793623/

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