У меня есть абстрактный контейнер AbstractContainer
, параметризованный по типу T
, который указывает тип того, что находится в контейнере. Каждый подтип (в данном случае FloatContainer
) затем указывает, что на самом деле находится в контейнере (в данном случае Float64
).
В идеале у меня будет возможность получить обратно, какой тип находится в контейнере, если У меня есть только тип контейнера. Таким образом, я мог бы использовать его в другой структуре (в этом примере MultiplyBy
)
Я думал сделать это аналогично внутренней функции eltype
Джулии, но я не могу заставить ее работать. Я всегда получаю ошибку метода (подробное сообщение об ошибке см. В последнем фрагменте)
abstract type AbstractContainer{T} end
gettype(::Type{AbstractContainer{T}}) where T = T
struct FloatContainer <: AbstractContainer{Float64}
x::Float64
end
struct MultiplyBy{T<:AbstractContainer}
x::gettype(T)
end
function process(m::MultiplyBy, v::AbstractContainer)
return typeof(v)(m.x*v.x)
end
function main()
x = FloatContainer(2.0)
y = FloatContainer(3.0)
op = MultiplyBy{FloatContainer}(y)
z = process(op, x)
println(z.x)
end
main()
ERROR: LoadError: MethodError: no method matching gettype(::TypeVar)
Closest candidates are:
gettype(!Matched::Type{AbstractContainer{T}}) where T at /Users/.../test.jl:6
Я должен признать, что я совсем новичок в Джулии, но мне очень интересно узнать об этом больше , Так что любые советы приветствуются - либо о том, как решить эту проблему по-другому, либо где моя ошибка.