考虑以下设置
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
函数。
这可能吗?我该怎么做? (感谢您的帮助!)
答案 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))