Method ambiguity for custom types with generically defined `StructUtils.StructStyle` methods
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Parti da parse.jl:177 e analizza come JSON.JSONReadStyle esegue il dispatch di dictlike per i tipi personalizzati insieme al metodo StructUtils.StructStyle nel reproducer. Esegui l’esempio Julia fornito e i test rilevanti del package; il lavoro è completato quando il parsing di M.A con un JSONStyle personalizzato non genera più un errore di metodo ambiguo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
When parsing a custom type with generically defined StructUtils.StructStyle methods, trying to parse said type with a custom JSON.JSONStyle results in a method ambiguity.
Minimal reproducer (JSON v1.6.1, StructUtils 2.8.2, julia 1.12.5, M1 Macbook Pro running MacOS 13.5.1)
module M
using StructUtils
struct A
v::Dict{String, Int}
end
Base.pairs(a::A) = Base.pairs(a.v)
StructUtils.initialize(::StructUtils.StructStyle, ::Type{A}, source) = A(Dict{String, Int}())
StructUtils.dictlike(::StructUtils.StructStyle, ::Type{A}) = true
StructUtils.addkeyval!(a, k, v) = a.v[k] = v
end
a = M.A(Dict("a" => 1, "b" => 2))
using JSON
struct CustomJSONStyle <: JSON.JSONStyle end
style = CustomJSONStyle()
json_str = JSON.json(a; style)
JSON.parse(json_str, M.A; style)
Output
julia> JSON.parse(json_str, M.A; style)
ERROR: MethodError: dictlike(::JSON.JSONReadStyle{JSON.Object{String, Any}, Nothing, CustomJSONStyle}, ::Type{Main.M.A}) is ambiguous.
Candidates:
dictlike(st::JSON.JSONReadStyle, ::Type{T}) where T
@ JSON ~/.julia/packages/JSON/gMdcG/src/parse.jl:177
dictlike(::StructUtils.StructStyle, ::Type{Main.M.A})
@ Main.M REPL[1]:10
Possible fix, define
dictlike(::JSON.JSONReadStyle, ::Type{Main.M.A})
- Lingua principale
- Julia
- Stelle
- 359
- Fork
- 117
- Merge medio
- 1g 12m
- PR unite (30g)
- 45
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaIO/JSON.jl
-
Comment supportApertaenhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
JuliaIO/JSON.jl#343 · 3 commenti · 9 reazioni ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaIO/JSON.jl
Issue simili
-
io
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
JuliaGPU/GPUArrays.jl#837 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
bmad-sim/BeamTracking.jl#382 ·
I maintainer di solito rispondono entro 1 giorno