Подтип с параметром, отличным от супертипа

Допустим, я определил тип просто как псевдоним для определенного массива в Julia, но с дополнительной информацией, скажем, просто строкой

abstract A{T,N}
   foo::AbstractArray{T,N}
   bar::Real
end

Я хотел бы определить подтип, имеющий, возможно, другой элемент, но также ограничивающий второй параметр типа целым числом и имеющий значение N+1, если B имеет тип N.

type B{N::Int} <: A{T,N+1}
   baz::Float64
end

В этом примере ни ::Int, ни N+1 не кажутся правильными, как и синтаксически. Я немного новичок в Джулии, но я много читал в последние дни и не мог найти решения для этого.

Как я могу сделать такой «ограниченный» подтип?

Правка: возможно, есть еще один сбой. Для супертипа N должен быть вектором, указывающим размер foo, а для подтипа это должно быть целое число, указывающее длину вектора.

Редактировать 2: я хотел использовать abstract A, который я отредактировал сейчас, как указано в комментариях.

Редактировать 3: Итак, я думаю, что одна проблема заключается в том, что типы abstract не могут иметь полей (что я не понимаю, почему, но в любом случае), тогда я все же не могу объявить параметры типа, например. просто целое число. Итак, как я могу сделать что-то вроде

abstract A{T,N}
type B{N::Integer} <: A{Float64,N+1}
  v:FixedVector{N+1,Float64}
end

Я всегда сталкиваюсь с проблемой, что N всегда (независимо от того, что я делаю) остается Typevar, в то время как я хотел бы просто иметь Integer. Итак, есть ли способ сделать тип зависимым от переменной?


person Ronny    schedule 22.11.2016    source источник