在Julia中创建自定义类型
在Julia中,如何创建自定义类型在Julia中创建自定义类型,julia,Julia,在Julia中,如何创建自定义类型MyOrderedDictA和MyOrderedDictB,以便: 每个都具有一个OrderdDict的所有功能,并且可以传递给任何接受AbstractDict的函数 它们彼此不同,因此我可以利用多重分派 我怀疑\希望这是直截了当的,但还没有弄清楚。其他人会更好地回答这个问题,但请快速回答: 为此,您需要查看orderedict实现,特别是为orderedicts定义了哪些方法。如果您想将它传递给接受AbstractDicts的方法,您需要像struct MyD
MyOrderedDictA
和MyOrderedDictB
,以便:
OrderdDict
的所有功能,并且可以传递给任何接受AbstractDict
的函数我怀疑\希望这是直截了当的,但还没有弄清楚。其他人会更好地回答这个问题,但请快速回答:
orderedict
实现,特别是为orderedict
s定义了哪些方法。如果您想将它传递给接受AbstractDict
s的方法,您需要像struct MyDictA{T,s}一样对它进行子类型化,基本上,您需要做的是定义您的类型MyOrderedDictA
,包装一个常规的OrderedDict
,并将可应用于OrderedDict
的所有函数转发到此包装的dict
不幸的是,(据我所知,AbstractDict
目前还没有文档化(参见AbstractArray
)。您可以查看它们的定义并检查为它们定义了哪些函数。或者,更实用的方法是只使用MyOrderedDictA
,每当您收到错误消息时,由于未定义函数,您可以“动态”转发此函数
在任何情况下,使用中的宏@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)
使用Lazy
结构myOrderedPicta{T,S}1,1=>2)
请参阅:请注意,如果您想创建一个新类型,其行为完全与OrderedDict相同,只是为了调度目的,您可能做了一些不太理想的事情。此外,此线程可能会对您有所帮助:Julia Discussion线程上的OP想要做的正是我想做的,尽管我认为他提出的问题比我提出的要好。但我认为创建传递类型很容易,这似乎是错误的。我将尝试@crstnbr建议的方法,但如果你认为我在做一些次优的事情,那么你可能是正确的。