use*_*788 6 types abstract-type julia
如何在julia中获取参数类型实例的子类型?例如:
immutable Dog{T <: Number}
snout::T
end
dog = Dog(5.)
typeof(dog)
Run Code Online (Sandbox Code Playgroud)
...回报Dog{Float64}.有没有办法Float64从变量中获取类型dog而不明确引用该字段snout?
这取决于您的使用案例.如果您对这样的特定情况感兴趣,一个好方法是定义一个函数
dogtype{T}(::Dog{T}) = T
Run Code Online (Sandbox Code Playgroud)
然后dogtype(Dog(.5))会给你Float 64.
这是用于eltype在基础Julia中实现该功能的一种模式.
不,因为的类型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
Run Code Online (Sandbox Code Playgroud)