将许多标准方法扩展为新的自定义矢量类型

Col*_*ers 3 julia

我构建了一个新的矢量类型:

type MyType
    x::Vector{Float64}
end
Run Code Online (Sandbox Code Playgroud)

我想扩展许多标准方法,例如加法,减法,逐元素比较等我的新类型.我是否需要为每个方法定义方法定义,例如:

+(a::MyType, b::MyType) = a.x + b.x
-(a::MyType, b::MyType) = a.x - b.x
.<(a::MyType, b::MyType) = a.x .< b.x
Run Code Online (Sandbox Code Playgroud)

或者我可以在这里使用一些语法快捷方式吗?

ric*_*2hs 6

以下是使用Julia的Metaprogramming的示例:

for op in (:+, :-, :.<)
    @eval ($op)(a::MyType, b::MyType) = ($op)(a.x, b.x)
end
Run Code Online (Sandbox Code Playgroud)