Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 用户定义结构上的for循环问题_Julia - Fatal编程技术网

Julia 用户定义结构上的for循环问题

Julia 用户定义结构上的for循环问题,julia,Julia,我将结构定义为: struct CLocation{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end struct CSize{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end struct FLocation{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end

我将结构定义为:

struct CLocation{T<:Real}
  x::Array{T,1}
  y::Array{T,1}
  z::Array{T,1}
end

struct CSize{T<:Real}
  x::Array{T,1}
  y::Array{T,1}
  z::Array{T,1}
end

struct FLocation{T<:Real}
  x::Array{T,1}
  y::Array{T,1}
  z::Array{T,1}
end

struct MStructure
  dimension::Real
  dims::Array{Int,1}
  csize::CSize
  ccenters::CLocation
  fcenters::FLocation
  corner::Array{Int,1}
  edge::Array{Int,1}
end

struct CValue # {T<:Real}
  domain::MStructure
  value::Union{Array{<:Real}, DenseArray{Bool}} #Union{Array{T}, BitArray{}}
end
其中我已将
val
初始化为0

有没有更简洁的方法来执行这个循环?最好采用以下格式:
val=[val+vec[i]表示1:N中的i]

它返回类型为
Cvalue
的向量,而我的意图是val只是类型为
Cvalue


我尝试了
val=(val+vec[I]代表1:N中的I)
,但没有成功。

在Julia 1.6和更高版本中,您可以使用
sum(vec;init=val)
。 在旧版本中,如果
+
是非关联的,则可以使用
reduce(+,vec;init=val)
foldl(+,vec;init=val)

如果希望保持枚举,则可以执行类似于
foldl((acc,i)->vec[i]+acc,1:length(vec);init=val)
或等效的操作

foldl(1:length(vec); init = val) do acc, i
  acc + vec[i]
end
function calc_sum(N,vec,val)
    for i in 1:N
        val = val + vec[i]
    end
    return val
end
foldl(1:length(vec); init = val) do acc, i
  acc + vec[i]
end