【发布时间】:2019-01-22 08:17:43
【问题描述】:
我有以下两个结构。当我使用构造函数初始化结构时,会创建一个数组,但这不是我所期望的。
using Distributions
mutable struct XYZ
x::Float64
y::Float64
z::Float64
end
mutable struct Coords
r::Vector{XYZ}
end
""" Make a structure called test that contains a vector of type XYZ
I want to have 10 XYZ structs in the "r" Vector """
Coords() = ( rand(Uniform(0,1.0),10,3) )
test = Coords()
我想通过test.r.x[i] 访问test,但是 Julia 抱怨类型 Tuple 没有字段 r。它创建的是一个大小为 10x3 的二维数组,我可以通过 test[i,j] 调用元素,但这远非我想要的。我想在复合材料中使用可调用名称的其他数组/变量...
我也试过这样初始化
XYZ() = (rand(),rand(),rand())
Coords() = ([ XYZ() for i in 1:10 ])
test = Coords()
我仍然收到同样的警告。似乎我创建了一个元组而不是复合类型。如何创建在其他结构中包含数组/向量的复合类型?
我使用的是 Julia 版本 1.0.2
【问题讨论】:
-
哦,
(expr)不会创建 1 元组——这相当于expr。要实际创建一个 1 元组(此处实际上不需要),请编写(expr,),就像在 Python 中一样。