julia调度参数抽象类型

时间:2017-04-12 08:06:06

标签: types julia

考虑以下设置

abstract AbstractShape
type Shape_1 <: AbstractShape end
type Shape_2 <: AbstractShape end
type Shape_3 <: AbstractShape end

abstract AbstractElement{S<:AbstractShape}
type Element_1{S} <: AbstractElement{S} end
type Element_2{S} <: AbstractElement{S} end
#...
type Element_n{S} <: AbstractElement{S} end

我想检索每种具体元素类型的形状类型参数S,例如

shape(::Type{Element_1{Shape_3}}) = Shape_3

使用

之类的东西
shape{S}(::Type{AbstractElement{S}}) = S

所以我不必为每个元素类型编写shape函数。

这可能吗?我该怎么做? (感谢您的帮助!)

1 个答案:

答案 0 :(得分:4)

我不会在0.5中建议Gnimuc的解决方法,因为如果具体<!DOCTYPE html> <html> <head> <title>Test Page</title> </head> <body> <form method="post" action="http://localhost:3000/testaction"> <h1>Log This:</h1> <input type="text" name="log"/> <input type="submit", value="Press Me!"/> </form> </body> </html> 并非都具有相同的类型,它将会失败;即如果是Element_n

相反,更好的解决方法是Element_4{N,S} <: AbstractElement{S}在0.5中使用的技巧;

eltype

当然,在0.6上,你可以简单地写一下调度:

shape{S<:AbstractShape}(::Type{AbstractElement{S}}) = S
shape{T<:AbstractElement}(::Type{T}) = shape(supertype(T))