Combining abstract types and parametric types?
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng việc xem xét các entry point StructTypes.StructType, subtypekey và subtypes hiện có được mô tả trong issue, sau đó so sánh chúng với API parametrickey được đề xuất. Xác định cách biểu diễn và tái tạo các giá trị tham số kiểu, bao gồm cả tương tác với các subtype trừu tượng. Công việc được xem là hoàn tất khi hành vi và API được đặc tả đủ rõ ràng để định hướng việc triển khai và các bài kiểm thử của nó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- Julia
- Star
- 86
- Fork
- 21
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của JuliaData/StructTypes.jl
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
JuliaData/StructTypes.jl#104 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
JuliaData/StructTypes.jl#102 · 1 bình luận ·
-
Register v1.11.0?Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
JuliaData/StructTypes.jl#98 · 2 bình luận · 1 reaction ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 30/100
JuliaData/StructTypes.jl#96 · 1 bình luận ·
-
`StructTypes.x` is not definedCó thể đã có người làm @sunoru đã nhận 1125 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
JuliaData/StructTypes.jl#92 · 3 bình luận ·
Tất cả issue của JuliaData/StructTypes.jl
Issue tương tự
-
Độ khó 2/5 Dưới một giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
CliMA/ClimaAtmos.jl#4891 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
tagbot-manual
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
tshort/StaticCompiler.jl#191 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
SciML/SciMLSensitivity.jl#1703 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
JuliaGPU/GPUCompiler.jl#1008 ·
Maintainer thường phản hồi trong vòng 1 ngày