函数Base.+必须显式导入才能扩展

mj *_*eri 4 julia ijulia-notebook

如果我的问题很愚蠢,我对朱莉娅很新,请原谅我

对于exmaple我定义了这样的类型:

type Vector2D
    x::Float64
    y::Float64
end
Run Code Online (Sandbox Code Playgroud)

和2个对象w和v:

v = Vector2D(3, 4)
w = Vector2D(5, 6)
Run Code Online (Sandbox Code Playgroud)

如果我把它们加起来就会引发这个错误:MethodError: no method matching +(::Vector2D, ::Vector2D)没关系,但是当我想定义一个用于求和这些对象的方法时

+(a::Vector2D, b::Vector2D) = Vector2D(a.x+b.x, a.y+b.y)
Run Code Online (Sandbox Code Playgroud)

它引发了这个错误:

error in method definition: function Base.+ must be explicitly imported to be extended
Run Code Online (Sandbox Code Playgroud)

朱莉娅版本0.5

Dav*_*ers 6

正如错误消息所示,您必须告诉Julia您希望+从Base(标准库)扩展该功能:

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)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在Julia 0.6中,这变为`Base.:+`. (4认同)
  • 或者只是`Base.+(a :: Vector2D,b :: Vector2D)= Vector2D(ax + bx,ay + by)` (3认同)