No, `a` is the (concrete) type `T`, which is a subtype of `ABC` (and a new
type `B{T}` is created for each `T`). So you shouldn't lose performance
because of this.
Cheers,
Kevin
On Thu, Feb 4, 2016 at 8:10 AM, Christopher Alexander <[email protected]>
wrote:
> Let's say I have the following types:
>
> abstract ABC
>
> type A <: ABC
> a::Float64
> end
>
> type B{T <: ABC}
> a::T
> end
>
> In some cases, I need for type "B" to be incompletely initialized so that
> I can define its parameter "a" later. I've found out that you can do
> something like this:
>
> type B{T <: ABC}
> a::T
>
> call(::Type{B}) = new{ABC}()
> end
>
> which then allows this:
>
> julia> myB = B()
> B{ABC}(#undef)
>
> My question is, I'm assuming you lose any of the performance gain by using
> the parametric type in this case because you are still using the abstract
> type "ABC" for the parameter "a" (even if you define it later with a
> concrete "A"). Is there a better way to do this?
>
> Thanks!
>
> Chris
>