[英]How to extract the specific type from an instance of a generic type in julia?
如何在julia中获取参数类型实例的子类型? 例如:
immutable Dog{T <: Number}
snout::T
end
dog = Dog(5.)
typeof(dog)
...返回Dog{Float64}
。 有没有办法让在类型Float64
从可变dog
没有明确提及到外地snout
?
这取决于您的使用案例。 如果您对这样的特定情况感兴趣,一个好方法是定义一个函数
dogtype{T}(::Dog{T}) = T
然后dogtype(Dog(.5))
会给你Float 64
。
这是用于在基础Julia中实现eltype
函数的一种模式。
这对我有用:
julia> VERSION
v"0.4.0-dev+5733"
julia> immutable Dog{T <: Number}
snout::T
end
julia> dog = Dog(0.5)
Dog{Float64}(0.5)
julia> typeof(dog).parameters[1]
Float64
不,因为dog
的类型是Dog{Float64}
而不是 Float64
。 如果您通过多种类型对Dog
进行参数化,请考虑预期的输出。
建议的方法是使用方法来访问类型/不可变字段:
julia> type Foo{T <: Number, S <: AbstractString}
bar::T
baz::S
end
julia> foo = Foo(5.5, "test")
Foo{Float64,ASCIIString}(5.5,"test")
julia> typeof(foo)
Foo{Float64,ASCIIString}
julia> typeof(foo.bar)
Float64
julia> typeof(foo.baz)
ASCIIString
julia> for field in names(Foo)
@eval $(field)(x::Foo) = x.$field
end
julia> typeof(bar(foo))
Float64
julia> typeof(baz(foo))
ASCIIString
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.