2017-09-06 4 views
4

줄리아에있는 Type의 빈 벡터를 초기화하는 표현식이 Vector{Type}()Type[]입니까? 어느 구문이 선호됩니까?줄리아에서 빈 벡터를 초기화하는 두 가지 동일한 방법

+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 seeArray 생성자로 정의됩니다. 그것은 단지 편리한 속임수입니다. 저는 다른 스타일 가이드를 선호하는 스타일 가이드에 대해 알지 못합니다.

+0

'T []'를 사용할 때 적어도 하나 이상의 문제가 있음에 유의하십시오 : https://discourse.julialang.org/t/performance-issue-with-use-of-eltype/5764와 https : // github을보십시오. .com/JuliaLang/julia/issues/23618를 참조하십시오. – sbromberger

+0

그것은 단지 배열 내포물과 관련이 있습니다 - 빈 벡터 초기화가 아닙니다. –