Джулия: преобразование любого вектора типа в вектор реального

Я определяю тип

type mytype
    e1:: Real
    e2:: Real
end

Я хочу иметь вектор mytype:

Vmtype = Array{mytype}(10)

когда я прошу у Джулии 10 e1. Я получаю сообщение об ошибке Vmtype[1:2].e1 ОШИБКА: тип Массив не имеет поля e1

Как я могу получить доступ к Вектору Vmtype[1:10]?


person grande mundo    schedule 03.01.2016    source источник


Ответы (1)


Во-первых, вы должны заполнить значения Vmtype. Что вы делаете, так это создаете «пустой» массив типа mytype.

Vmtype = Array{mytype}(10)
e1s = collect(1:10)
e2s = collect(91:100)

for i in 1:10
    Vmtype[i] = mytype(e1s[i], e2s[i])
end

то вы можете получить доступ к полям как

Vmtype[1].e1

Обратите внимание, что одна вещь — это объект типа mytype, а другая — массив с элементами типа mytype. См. http://docs.julialang.org/en/latest/manual/types/#man-parametric-types

РЕДАКТИРОВАТЬ:

Чтобы создать другой массив с e1s Vmtype, вы можете использовать

Ae1 = map(x -> x.e1, Vmtype)

Затем вы можете использовать Ae1 в plot((1:10), Ae1).

person amrods    schedule 03.01.2016
comment
Интересно, можно ли как-то перегрузить оператор ., чтобы он работал с Arrays. - person amrods; 04.01.2016
comment
Спасибо за поправку amrods. Однако я все равно получаю сообщение об ошибке, когда набираю Vmtype[1:2].e1. Есть ли способ получить доступ ко всему вектору Vmtype[1:10].e1. Что я хочу сделать, так это запустить plot((1:10),Vmtype[1:10].e1)? - person grande mundo; 04.01.2016
comment
Дело в том, что Vmtype не имеет полей; его элементы имеют поля e1 и e2. Что вы можете сделать, так это заполнить другой массив значениями e1 элементов Vmtype, проверить редактирование. - person amrods; 04.01.2016