Изменить массив значений поля структуры в Юлии - PullRequest
4 голосов
/ 30 апреля 2020

Допустим, я хочу определить следующий объект

mutable struct Coord
x::Float
y::Float
end

и создать вектор координаты

coordVec = Vector{Coord}(undef, 3)

, используя для l oop мы можем определить значение координаты в coordVec, но как назначить новое значение координаты? Я попытался следующим образом, но не работает

coordVec[1].x = 3.1
(p->p.x).(coordVec)[1] = 3.1

Ответы [ 2 ]

5 голосов
/ 30 апреля 2020

Проблема в том, что ваш массив coordVec неинициализирован, потому что вы использовали undef для создания массива, то есть его значения не определены:

julia> coordVec = Vector{Coord}(undef, 3)
3-element Array{Coord,1}:
 #undef
 #undef
 #undef

И поэтому вы не можете обновить поля , Если вы поместите Coord объектов в ваш массив, вы можете обновить их, как и ожидалось:

julia> coordVec[2] = Coord(1, 2)
Coord(1.0, 2.0)

julia> coordVec[2].x = 3.0
3.0

julia> coordVec
3-element Array{Coord,1}:
 #undef
    Coord(3.0, 2.0)
 #undef
2 голосов
/ 30 апреля 2020

При одновременной инициализации всего Vector всегда необходимо учитывать широковещание (предполагается, что Coord имеет Float64 поля:

julia> Coord.([1.,2.,3.], 4:6)
3-element Array{Coord,1}:
 Coord(1.0, 4.0)
 Coord(2.0, 5.0)
 Coord(3.0, 6.0)
...