2016-05-04 4 views
6

Ich sehe oft so etwas wie die folgenden in Julia:Julia was bedeutet ein namenloser Wert im Funktionskopf?

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

wie funktioniert die (:: Arbeit? Und wie lautet die Terminologie dafür?

+0

Ich habe gerade festgestellt, dass Ihr zweites Argument auch keinen Namen hat, was mir für einen Funktionskopf ein bisschen komisch vorkommt. Kommt es vielleicht von einer Fehlermeldung? –

Antwort

11

Ihre Antwort finden Sie in the Julia documentation for defining conversions. Zu zitieren (mit Typen es noch einfacher lesbar machen geschaltet):

Der Typ des ersten Arguments dieser Methode ist ein singleton type, Type{Point{Float64}}, die einzige Instanz, von denen Point{Float64}. Daher wird diese Methode nur aufgerufen, wenn das erste Argument der Typ Point{Float64} ist. Beachten Sie die für das erste Argument verwendete Syntax : Der Argumentname wird vor dem Symbol :: weggelassen und nur der Typ angegeben. Dies ist die Syntax in Julia für ein Funktionsargument , dessen Typ angegeben ist, aber dessen Wert nie im Funktionskörper verwendet wird. Da in diesem Beispiel der Typ ein Singleton ist, gibt es keinen Grund, seinen Wert innerhalb des Körpers zu verwenden.

(Hervorhebung von mir)

Sie werden auch die foo(::SomeType) Syntax in Fehlermeldungen auftreten, wenn eine Funktion mit den Argumenten des falschen Typs aufzurufen versuchen, (schließlich das Argument Namen eines nicht zeigen kann, Variante, die nicht existiert). ZB:

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

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