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?
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?
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 tipoPoint{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)
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? –