如何在julia中获取参数类型实例的子类型?例如:
immutable Dog{T <: Number}
snout::T
end
dog = Dog(5.)
typeof(dog)
...返回Dog{Float64}
。有没有办法从变量Float64
获取dog
类型而不明确引用字段snout
?
答案 0 :(得分:9)
这取决于您的使用案例。如果您对这样的特定情况感兴趣,一个好方法是定义一个函数
dogtype(Dog(.5))
然后Float 64
会给你eltype
。
这是用于在Julia基础上实现org.springframework.context.ApplicationListener
函数的模式。
答案 1 :(得分:2)
这对我有用:
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
答案 2 :(得分:1)
不,因为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