2017-09-06 24 views
4

Typeの空のベクトルをJuliaで完全に初期化する式Vector{Type}()Type[]はありますか?いずれの構文も好まれますか?Juliaで空のベクトルを初期化する2つの等価な方法

+2

私は後者がより現場で定義されていると言いますが、前者はプログラム的です。この例は同じですが、 'Vector {Int64}(a)'の場合を考えてみましょう: 'a = 0'の場合は空ベクトルですが、それ以外の場合はガベージ値で初期化されたベクトルです。 –

答えて

8

はい、彼らが効果的に同じです:

julia> @code_typed Vector{Any}() 
CodeInfo(:(begin 
     return $(Expr(:foreigncall, :(:jl_alloc_array_1d), Array{Any,1}, svec(Any, Int64), Array{Any,1}, 0, 0, 0)) 
    end))=>Array{Any,1} 

julia> @code_typed Any[] 
CodeInfo(:(begin 
     return $(Expr(:foreigncall, :(:jl_alloc_array_1d), Array{Any,1}, svec(Any, Int64), Array{Any,1}, 0, 0, 0)) 
    end))=>Array{Any,1} 

Type[]構文は、他のすべてのx[]の構文のように実際にある - それはgetindex(Type)に展開されます。 there you'll seeは、Arrayコンストラクタの観点から定義されています。それは単に便利な省略形です。 私はどちらか一方を好むスタイルガイドについて知らない。

+0

現在、 'T []'の使用には少なくとも1つの問題があることに注意してください:https://discourse.julialang.org/t/performance-issue-with-use-of-eltype/5764とhttps:// github .com/JuliaLang/julia/issues/23618を参照してください。 – sbromberger

+0

これは配列の解説にのみ関連しています。空のベクトルの初期化ではありません。 –

関連する問題