我可以将类型信息添加到作为函数的参数吗?
考虑以下示例:
function f{T} (func, x::Int)
output = Dict{Int, Any}()
output[x] = func(x)
return output
end
我不喜欢我必须说Any
字典的值类型。我宁愿做以下事情:
function f{T} (func::Function{Int->T}, x::Int)
output = Dict{Int, T}()
output[x] = func(x)
return output
end
我可以提供这样的函数类型提示吗?我有点想说以下
f :: (Int -> T), Int -> Dict{Int, T}
答案 0 :(得分:13)
目前不是。但是,我们可能会在将来添加一些内容。
答案 1 :(得分:1)
这不是主要问题的答案,而是Any
问题中Dict
更多非常丑陋的解决方法:
function f(func, x::Int)
T = code_typed(func, (Int,))[1].args[3].typ
output = Dict{Int, T}()
output[x] = func(x)
return output
end
这可能效率不高,可能只适用于简单的情况(甚至不包括匿名函数),例如
>>> g(x) = x*2
>>> typeof(f(g, 1234))
Dict{Int64,Int64}
>>> h(x) = x > zero(x) ? x : nothing
>>> typeof(f(h, 1234))
Dict{Int64,Union(Int64,Nothing)}
修改强>
这更好用:
function f(func, x::Int)
[x => func(x)]
end
>>> dump( f(x->2x, 3) )
Dict{Int64,Int64} len 1
3: Int64 6