【发布时间】:2016-09-09 11:13:56
【问题描述】:
如何检查一个类型在 Julia 中实现了一个接口?
例如迭代接口由函数start、next、done实现。
我需要根据参数类型是否实现给定接口来对函数进行专门化。
编辑
这是我想做的一个例子。
考虑以下代码:
a = [7,8,9]
f = 1.0
s = Set()
push!(s,30)
push!(s,40)
function getsummary(obj)
println("Object of type ", typeof(obj))
end
function getsummary{T<:AbstractArray}(obj::T)
println("Iterable Object starting with ", next(obj, start(obj))[1])
end
getsummary(a)
getsummary(f)
getsummary(s)
输出是:
Iterable Object starting with 7
Object of type Float64
Object of type Set{Any}
这是我们所期望的,因为Set 不是AbstractArray。但显然我的第二种方法只需要类型 T 来实现迭代接口。
我的问题不仅与迭代接口有关,还与一组函数定义的所有接口有关。
EDIT-2
我认为我的问题与
有关https://github.com/JuliaLang/julia/issues/5
因为我们可以想象像T<:Iterable这样的东西
【问题讨论】:
-
如果我理解正确,你在找
methodswith()? -
@GnimucK。是的,类似的东西。但我没有看到使用
methodswith()实现动态调度的干净方法:我想定义两个函数,并根据类型是否实现接口来使用正确的函数。
标签: julia