繁体   English   中英

如何从julia中的泛型类型的实例中提取特定类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM