2017-03-19 2 views
3

importiert werden i julia ziemlich neu bin mir verzeihen, wenn meine Frage dumm ist,Funktion Base + muss explizit erweitert werden

für exmaple i definiert einen Typ wie folgt aus:

type Vector2D 
    x::Float64 
    y::Float64 
end 

und 2 Objekt w und v:

v = Vector2D(3, 4) 
w = Vector2D(5, 6) 

wenn ich hinzufügen sie bis es diese err erhöhen wird: MethodError: no method matching +(::Vector2D, ::Vector2D) es ist in Ordnung, aber wenn ich ein Verfahren zum Summieren Thesen definieren möge Objekt

+(a::Vector2D, b::Vector2D) = Vector2D(a.x+b.x, a.y+b.y) 

sie diesen Fehler auslösen:

error in method definition: function Base.+ must be explicitly imported to be extended 

julia Version 0.5

Antwort

4

Da die Fehlermeldung sagt, müssen Sie Julia sagen, dass Sie die + Funktion von Base (die Standard-Bibliothek erweitern möchten .):

import Base: +, - 

+(a::Vector2D, b::Vector2D) = Vector2D(a.x + b.x, a.y + b.y) 
-(a::Vector2D, b::Vector2D) = Vector2D(a.x - b.x, a.y - b.y) 
+3

Oder nur 'Base + (a :: Vector2D, b :: Vector2D) = Vector2D (ax + bx, ay + by)' –

+4

Beachten Sie, dass dies in Julia 0.6 zu "Base.: +" Wird. –

+0

@ DavidP.Sanders was ist der Grund dafür? (oder haben Sie einen Link zu einer Diskussion über die relevante Änderung?) –

Verwandte Themen