gpt4 book ai didi

julia - Julia中的漂亮物体打印机

转载 作者:行者123 更新时间:2023-12-04 07:19:31 24 4
gpt4 key购买 nike

我想在 Julia 中编写一个函数,它可以采用任何复合类型并漂亮地打印嵌套成员的名称、它们的类型和它们的值,我想把这个函数放在一个包中供社区使用。
想象一个用户有以下结构:

struct House
value::Int32
rooms::Int32
number::Int32
end

struct Street
name::String
houses::AbstractArray{House}
end

struct Town
name::String
streets::AbstractArray{Street}
end

town = Town(<initialization code here>)
该用户可以调用 PrettyPrinter.print(town) ,它应该输出类似
town::Town
name::String = "London"
streets[1]::Street
name::String = "Downing Street"
houses[1]::House
value::Int32 = 100000
rooms::Int32 = 5
number::Int32 = 10
houses[2]::House
value::Int32 = 300000
rooms::Int32 = 6
number::Int32 = 40210
但当然,PrettyPrinter 包不能解析结构实现,它必须通过低级别的 Julia 技巧来完成它的工作。我的问题不在于递归编程。
问题:如何访问成员名称、类型和值?

最佳答案

此功能已内置于 dump功能:

julia> t = Town("London", [Street("Downing Street",[House(100000,5,10),House(300000,6,40210)])])
Town("London", Street[Street("Downing Street", House[House(100000, 5, 10), House(300000, 6, 40210)])]);

julia> dump(t)
Town
name: String "London"
streets: Array{Street}((1,))
1: Street
name: String "Downing Street"
houses: Array{House}((2,))
1: House
value: Int32 100000
rooms: Int32 5
number: Int32 10
2: House
value: Int32 300000
rooms: Int32 6
number: Int32 40210
但是,如果要查询数据,可以使用 fieldnames功能:
julia> fieldnames(typeof(t))
(:name, :streets)

julia> getfield(t, :name)
"London"

关于julia - Julia中的漂亮物体打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68593820/

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