首页 > 解决方案 > 在 Julia 中创建自定义类型

问题描述

在 Julia 中,我如何创建自定义类型MyOrderedDictAMyOrderedDictB

  1. 每个都具有 a 的所有功能OrderdDict,并且可以传递给任何接受AbstractDicts 的函数
  2. 它们彼此不同,因此我可以利用多次调度。

我怀疑\希望这很简单,但一直无法弄清楚。

标签: julia

解决方案


基本上,您要做的就是定义您的 type MyOrderedDictA,包装一个 regular OrderedDict,并将所有可以应用于 an 的函数转发OrderedDict到这个包装的 dict。

不幸的是,该AbstractDict 界面(据我所知)目前没有记录(参见AbstractArray)。您可以查看它们的定义并检查为它们定义了哪些函数。或者,有更实用的方法来使用您的MyOrderedDictA,每当您收到错误消息时,因为未定义函数,您“即时”转发此函数。

无论如何,使用Lazy.jl@forward中的宏,您可以执行以下操作。

using Lazy

struct MyOrderedDictA{T,S} <: AbstractDict{T,S}
    dict::OrderedDict{T,S}
end

MyOrderedDictA{T,S}(args...; kwargs...) where {T,S} = new{T,S}(OrderedDict{T,S}(args...; kwargs...))

function MyOrderedDictA(args...; kwargs...)
    d = OrderedDict(args...; kwargs...)
    MyOrderedDictA{keytype(d),valtype(d)}(d)
end

@forward MyOrderedDictA.dict (Base.length, Base.iterate, Base.getindex, Base.setindex!)

d = MyOrderedDictA(2=>1, 1=>2)

推荐阅读