Переназначение значений в массиве объектов в Julia - PullRequest
0 голосов
/ 05 июня 2018

Я новый изучающий язык Юлии.Я определил массив объектов следующим образом:

type a
     b :: Int
     c :: Int
end
d = Array{a}(3)

Это возвращает мне 3-элементный массив {a, 1} со значениями мусора.Я хочу присвоить ему значения.Я написал следующий код, но он не работает.

for i = 1:3
    d[i].b = i
    d[i].c = i^2
end

Любое предложение будет высоко оценено.

1 Ответ

0 голосов
/ 05 июня 2018

Чтобы инициализировать a, вы должны вызвать конструктор.Кроме того, вы можете использовать понимание для создания массива:

type a
     b :: Int
     c :: Int
end

d=[a(i,i^2) for i in 1:3]

, что дает

3-element Array{a,1}:
 a(1, 1)
 a(2, 4)
 a(3, 9)

Также обратите внимание, что type устарела, этоЛучше объявить ваши составные типы как:

struct Foo ... end

или

mutable struct Foo ... end

См. официальный документ: Составные типы и Изменяемые составные типы


Обновление (ваш комментарий): да, вы можете использовать любую функцию ...

function f() # can also use any argument 
         # long computation... for demo random number
         b=rand(Int8)
         c=rand(Int8)
         return a(b,c)
       end
f (generic function with 2 methods)

julia> d=[f() for i in 1:3]
3-element Array{a,1}:
 a(80, 104)
 a(98, -62)
 a(-37, 17)
...