2016-05-04 15 views
6

Vedo spesso qualcosa di simile a quanto segue in Julia:Julia cosa significa un valore senza nome nell'intestazione della funzione?

convert(::Type{Point{Float64}}, ::Float64) 

come funziona il (::? E qual è la terminologia per questo?

+0

Ho appena realizzato che anche il secondo argomento non ha un nome, il che mi sembra un po 'strano per un'intestazione di funzione. È forse da un messaggio di errore? –

risposta

11

La tua risposta può essere trovata in the Julia documentation for defining conversions. Per citare (con tipi passati a rendere ancora più semplice da leggere):

Il tipo del primo argomento di questo metodo è un singleton type, Type{Point{Float64}}, l'unico esempio dei quali è Point{Float64}. Pertanto, questo metodo viene richiamato solo quando il primo argomento è il valore di tipo Point{Float64}. Si noti la sintassi utilizzata per il primo argomento: il nome dell'argomento viene omesso prima del simbolo e viene fornito solo il tipo. Questa è la sintassi di Julia per un argomento di funzione il cui tipo è specificato ma il cui valore non è mai utilizzato nel corpo della funzione. In questo esempio, poiché il tipo è un singleton , non ci sarebbe alcun motivo per utilizzare il suo valore all'interno del corpo .

(sottolineatura mia)

potrete anche incontrare la sintassi foo(::SomeType) nei messaggi di errore, quando si cerca di richiamare una funzione con argomenti del tipo sbagliato (dopo tutto, non è possibile mostrare i nomi degli argomenti di un variante che non esiste). E.g:

julia> foo(x::Bool) = 3 
foo (generic function with 1 method) 

julia> foo(5) 
ERROR: `foo` has no method matching foo(::Int64) 
Problemi correlati