Login
Newsletter
Werbung

Thema: Programmiersprache Julia erreicht Version 1.0

3 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von linux-nutzer am Fr, 10. August 2018 um 14:15 #

Ich schätze mal, "Multimethoden" ist die deutsche Übersetzung für Multiple Dispatch.

Bei Multiple Dispatch verhält es sich ähnlich wie beim Überladen: Du kannst Funktionen gleichen Namens mehrfach definieren, solange sie sich in Typ und Anzahl der formalen Parameter unterscheiden. Anhand der Typen der aktuellen Parameter wird dann beim Funktionsaufruf die passende Funktion ausgewählt.

Auf klassische OOP übertragen bedeutet das: Statt "object.method(x, y)" rufst du "method(object, x, y)" auf. Bei Python sieht man das noch, wenn man Methoden in Klassen definiert, da ist der erste formale Parameter immer "self".

Beispiel: ein Auszug aus der Liste der Definitionen für den Multiplikationsoperator
julia> methods(*)
# 182 methods for generic function "*":
*(x::Bool, z::Complex{Bool}) in Base at complex.jl:236
*(x::Bool, y::Bool) in Base at bool.jl:91
*(x::Bool, y::T) where T<:Unsigned in Base at bool.jl:104
*(x::Bool, z::Complex) in Base at complex.jl:243
*(x::Bool, y::Irrational) in Base at irrationals.jl:111
*(x::Bool, y::T) where T<:Number in Base at bool.jl:101
*(a::Float16, b::Float16) in Base at float.jl:372
*(x::Float32, y::Float32) in Base at float.jl:378
*(x::Float64, y::Float64) in Base at float.jl:379
*(z::Complex{Bool}, x::Bool) in Base at complex.jl:237

  • 0
    Von Multivitaminmethode am Fr, 10. August 2018 um 19:03 #

    Achso das ist damit gemeint. Wusste gar nicht dass es dafür einen Namen gibt.

    • 0
      Von TypDerProgrammiersprachenBaut am Sa, 11. August 2018 um 13:47 #

      Der Unterschied ist, das Parameterüberladung meist so implementiert ist, dass es zur Zeit der Übersetzung umgesetzt wird, während Multimethoden zur Laufzeit z.B. über eine V-Tabelle ausgewählt werden.
      Julia implementiert das scheinbar so, dass bei Fällen wie

      methodenname(objekt1, ... objektn, arg1, ... argn)
      so, dass die Objekte als Tupel betrachtet werden, siehe dazu hier.
      Der Name ist die Übersetzung von "multimethods" was eine Möglichkeit ist "Multiple dynamische Bindung" ("multiple dynamic dispatch") zu implementieren. Man kann z.B. auch ein Visitorpattern benutzen.

Pro-Linux
Unterstützer werden
Neue Nachrichten
Werbung