2014-12-23 10 views
7

, bu kadar "sembolü" Ben tüm unsurları kodlamak bile bir Array{Any, 1} sonuçlanır:Bu liste anlama neden bir Dizi {Symbol, 1} yerine bir Array {Any, 1} döndürüyor? Bir liste anlayışı ile <code>Array</code> oluşturmaya çalışırken

julia> u_col_names=[symbol("user_id"), symbol("age"), symbol("sex"), symbol("occupation"), symbol("zip_code")] 
5-element Array{Symbol,1}: 
:user_id 
:age  
:sex  
:occupation 
:zip_code 

julia> col_names=["user_id", "age", "sex", "occupation", "zip_code"] 
5-element Array{ASCIIString,1}: 
"user_id" 
"age"  
"sex"  
"occupation" 
"zip_code" 

julia> u_col_names=[symbol(col_names[i]) for i in 1:size(col_names)[1]] 
5-element Array{Any,1}: 
:user_id 
:age  
:sex  
:occupation 
:zip_code 

Neden son liste anlama, bir yerine bir Array{Any, 1} dönmek olmadığını Array{Symbol, 1}? Aşağıdaki bir Array{Symbol, 1} dönmek yaptığı Not:

julia> col_names[1] 
"user_id" 

julia> symbol(col_names[1]) 
:user_id 

julia> [symbol(col_names[1]), symbol(col_names[2])] 
2-element Array{Symbol,1}: 
:user_id 
:age  

ben eksik: böylece, İlginç

julia> u_col_names=[symbol("col_names$i") for i in 1:size(col_names)[1]] 
5-element Array{Symbol,1}: 
:col_names1 
:col_names2 
:col_names3 
:col_names4 
:col_names5 

aşağıdakileri yapar?

cevap

8

JuliaLang/julia repo on GitHub numaralı sorunun izleyicisinde, this discussion'a göre, sorun, Julia'nın tür çıkarım sistemindeki bir eksiklikten kaynaklanıyor gibi görünüyor.

Bu davranış aslında şu anda beklenir: Jeff Bezanson (Julia yazar ve tutucuların biri) bir relevant commentanother discussion bıraktı. [col_names] global olduğundan, herhangi bir yerde değişiklik yapabilir, bu nedenle türünü bildiğimizi kabul edemeyiz. Bu aşırı kötümser, ama daha iyi yapmamıza izin verecek bir kural ortaya çıkarmak zor. Bu operasyonlar bir işlev içinde yürütülmektedir eğer belki Şaşırtıcı

, (as observed by John Myles White), türü doğru çıkarsama yoluyla geçerli:, sen map(symbol, <Array{T,1}>) kullanabilirsiniz Listenizi anlama alternatif olarak

julia> function fun() 
     col_names=["user_id", "age", "sex", "occupation", "zip_code"] 
     return u_col_names=[symbol(item) for item in col_names] 
     end 
fun (generic function with 1 method) 

julia> fun() 
5-element Array{Symbol,1}: 
:user_id 
:age  
:sex  
:occupation 
:zip_code 

hangi hatta küresel kapsam de bir Array{Symbol,1} dönmek yapar:

julia> col_names=["user_id", "age", "sex", "occupation", "zip_code"] 
5-element Array{ASCIIString,1}: 
"user_id" 
"age"  
"sex"  
"occupation" 
"zip_code" 

julia> map(symbol, col_names) 
5-element Array{Symbol,1}: 
:user_id 
:age  
:sex  
:occupation 
:zip_code 
+1

genel ilke iç fonksiyonları olduğu, comp iler "her şeyi" bilir: girişlerin türleri ve uygulanacak dönüşümler. Sonuç olarak daha agresif bir şekilde uzmanlaşabilir. – tholy

+0

@tholy Yorumunuz için teşekkürler. Bu konuda tavsiye edilen bir şey düşünebilir misin? – Jubobs

İlgili konular