2014-03-04 66 views
8

我現在有與陣列的類型屬性聲明數組屬性的大小的類型定義

immutable foo 
    a::Int64 
    b::Int64 
    x::Array{Float64,1} # One dimension array of Float 64, but no length info 
end 

我知道數組將總是包含100個Float64元件。有沒有辦法在類型註釋中傳遞這些信息?也許類似於可以聲明像x = Array(Float64, 100)這樣的實例化數組的大小的方式?

+3

固定大小陣列尚未在朱實現,見[此特性請求(https://github.com/JuliaLang/julia/issues/5857 )在GitHub上。我認爲建議你爲你的目的使用'NTuple {100,Float64}',但它是不可變的類型(例如setindex!方法未定義等)。 – gagolews

+2

請注意,[issue](https://github.com/JuliaLang/julia/issues/5857)包含可用的實現。 – tholy

回答

3

您可以使用內部構造函數強制不變量。

immutable Foo 
    a::Int64 
    b::Int64 
    x::Vector{Float64} # Vector is an alias for one-dimensional array 

    function Foo(a,b,x) 
     size(x,1) != 100 ? 
     error("vector must have exactly 100 values") : 
     new(a,b,x) 
    end 
end 

然後從REPL:

julia> Foo(1,2,float([1:99])) 
ERROR: vector must have exactly 100 values 
in Foo at none:7 

julia> Foo(1,2,float([1:100])) 
Foo(1,2,[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 … 91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0])