julia - Julia中的漂亮物体打印机
问题描述
我想在 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"
推荐阅读
- python-3.x - 合并字典和计数器对象
- datomic - 元组与复合元组与 Datomic 中的组件
- azure - 如何将 Azure blob 文件下载到下载文件夹中,而不是在浏览器中
- java - 使用 openapi 3.0、aws-cognito oauth2 配置 Springboot 时遇到问题
- c++ - Doxygen:如何链接到成员函数的 doc 块中的另一个成员函数?
- python - 无法在 python IDE 中使用 TensorFlow
- node.js - 如何在 nodejs 中持久化环境变量?
- r - 以编程方式将数据框转换为命名列表
- android - 在 MergeAdapter 中更改内部 recyclerView 的方向布局管理器
- python - 致命的 Python 错误:PyQt5.QtCore:无法嵌入 qt.conf