По сути, вам нужно определить ваш тип MyOrderedDictA
, обернуть обычный OrderedDict
и перенаправить все функции, которые можно применить к OrderedDict
, к этому упакованному дикту.
К сожалению, AbstractDict
интерфейс (насколько мне известно) в настоящее время не документирован (см. AbstractArray
). Вы можете посмотреть на их определение и проверить, какие функции для них определены. В качестве альтернативы, существует более практичный подход - просто использовать MyOrderedDictA
, и всякий раз, когда вы получаете сообщение об ошибке, поскольку функция не определена, вы отправляете эту функцию «на лету».
В любомВ этом случае, используя макрос @forward
из Lazy.jl , вы можете сделать что-то вроде следующего:
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)