使用julia对数组中用户定义类型的麻烦

时间:2016-07-18 08:31:38

标签: julia

使用包含用户定义类型的数组时遇到了一些麻烦。 一个简单的代码如下:

struct MyType
 a::Int64
 b::Int64
end

MyArray = Array{MyType}(5)
MyArray[1].a = [1 2 3] 

编译器显示错误消息 “UnderRefError:访问未定义的引用” 这是问题,因为MyType没有默认构造函数吗?

2 个答案:

答案 0 :(得分:4)

实际上,如果你没有明确定义一个,那么Julia总会自动定义一个默认的内部构造函数。它相当于:

julia> struct MyType
         a::Int64
         b::Int64
         MyType(a,b) = new(a,b)
       end

请注意,通过运行MyArray = Array{MyType}(5),您只需构造一个5个元素的数组,其eltype应为MyType。朱莉娅仍然不知道这些条目到底是什么,这就是错误所抱怨的。 看一下下面的例子:

julia> a = Array{Complex}(5)
5-element Array{Complex{T<:Real},1}:
 #undef
 #undef
 #undef
 #undef
 #undef

顺便说一句,我不知道您对此行MyArray[1].a = [1 2 3]的意思是什么,因为a的类型为Int,而不是Vector{Int}

答案 1 :(得分:3)

这条线没有意义

MyArray[1].a = [1 2 3]

你必须写一些像

这样的东西
MyArray[1] = MyType(4, 5)

因为MyArray数组的第一个元素未定义。 MyArray[1].a表示您正在尝试访问未定义对象的a成员。那不会起作用。

如果你想创建一个MyType对象的初始化5元素数组,你可以做这样的事情。

fill(MyType(0, 0), 10)