줄리아에있는 Type
의 빈 벡터를 초기화하는 표현식이 Vector{Type}()
및 Type[]
입니까? 어느 구문이 선호됩니까?줄리아에서 빈 벡터를 초기화하는 두 가지 동일한 방법
4
A
답변
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 []'를 사용할 때 적어도 하나 이상의 문제가 있음에 유의하십시오 : https://discourse.julialang.org/t/performance-issue-with-use-of-eltype/5764와 https : // github을보십시오. .com/JuliaLang/julia/issues/23618를 참조하십시오. – sbromberger
+0
그것은 단지 배열 내포물과 관련이 있습니다 - 빈 벡터 초기화가 아닙니다. –
나는 후자가 "현장에서 정의 된"구문보다 더 많은 반면, 전자는 프로그래밍 방식이라고 말합니다. 이 특별한 예는 똑같은 결과를 가져 오지만'Vector {Int64} (a)'의 경우를 생각해 봅시다 :'a = 0'의 경우 이것은 빈 벡터이지만 다른 어떤 경우에는 가비지 값으로 초기화 된 벡터입니다 . –