Combining abstract types and parametric types?
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
Piste de recherche
Commencez par examiner les points d’entrée existants StructTypes.StructType, subtypekey et subtypes décrits dans l’issue, puis comparez-les à l’API parametrickey proposée. Déterminez comment les valeurs des paramètres de type doivent être représentées et reconstruites, y compris leur interaction avec les sous-types abstraits. Le travail est terminé lorsque le comportement et l’API sont spécifiés assez clairement pour guider une implémentation et ses tests.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Let's say I have a type hierarchy like this:
abstract type Parent end
mutable struct Child1 <: Parent
type # Set to 'child1'
end
mutable struct Child2{N<:Integer} <: Parent
type # Set to 'child2'
i::N
end
StructTypes.StructType(::Type{Parent}) = StructTypes.AbstractType()
StructTypes.StructType(::Type{Child1}) = StructTypes.Mutable()
StructTypes.StructType(::Type{<:Child2}) = StructTypes.Mutable()
StructTypes.subtypekey(::Type{Parent}) = :type
StructTypes.subtypes(::Type{Parent}) = (child1=Child1, child2=Child2)
Currently, afaik, there is no mechanism for StructTypes to serialize/deserialize the value of N, like how it can write the type key for each child.
Current workarounds I can think of:
- Pick a unique
typename for each concrete version ofChild2{N}you expect to be possible:(child1=Child1, child2U8=Child2{UInt8}, child2I32=Child2{Int32}, ...) - Use
UnorderedStructorOrderedStructinstead ofMutable, and let the type parameter be inferred by the constructor.
Would it be feasible to support deserializing type parameters in the same way as the type itself? For example:
struct Child2{N<:Integer} <: Parent
type # Set to 'child2'
int_type::Type # Set to string(N)
i::N
end
StructTypes.parametrickey(::Type{<:Child2}, ::Val{1}) = :int_type
- Langage dominant
- Julia
- Étoiles
- 86
- Forks
- 21
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de JuliaData/StructTypes.jl
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
JuliaData/StructTypes.jl#104 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 45/100
JuliaData/StructTypes.jl#102 · 1 commentaire ·
-
Register v1.11.0?Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
JuliaData/StructTypes.jl#98 · 2 commentaires · 1 réaction ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 30/100
JuliaData/StructTypes.jl#96 · 1 commentaire ·
-
`StructTypes.x` is not definedPeut-être pris @sunoru l’a pris il y a 1125 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
JuliaData/StructTypes.jl#92 · 3 commentaires ·
Toutes les issues de JuliaData/StructTypes.jl
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
CliMA/ClimaAtmos.jl#4891 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
tagbot-manual
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
tshort/StaticCompiler.jl#191 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
SciML/SciMLSensitivity.jl#1703 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
JuliaGPU/GPUCompiler.jl#1008 ·
Les mainteneurs répondent en général sous 1 jour
-
`biggs6` disagrees with CUTEst and is unbounded belowPeut-être pris @timholy l’a pris il y a 1 jour. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100