programacion - ¿Puedo agregar información de tipo a los argumentos que son funciones en Julia?
manual de julia (2)
Esta no es una respuesta a la pregunta principal, sino más bien una solución muy fea para el problema de Any
in the 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
Probablemente no sea eficiente y probablemente funcione solo en casos simples (que ni siquiera incluyen funciones anónimas) como
>>> 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)}
EDITAR:
Esto funciona mejor:
function f(func, x::Int)
[x => func(x)]
end
>>> dump( f(x->2x, 3) )
Dict{Int64,Int64} len 1
3: Int64 6
¿Puedo agregar información de tipo a los argumentos que son funciones?
Considere el siguiente ejemplo:
function f{T} (func, x::Int)
output = Dict{Int, Any}()
output[x] = func(x)
return output
end
No me gusta, tengo que decir Any
para el tipo de valor del diccionario. Prefiero hacer lo siguiente:
function f{T} (func::Function{Int->T}, x::Int)
output = Dict{Int, T}()
output[x] = func(x)
return output
end
¿Puedo proporcionar sugerencias tipográficas de funciones como esta? Quiero decir lo siguiente
f :: (Int -> T), Int -> Dict{Int, T}
No actualmente. Sin embargo, podemos agregar algo en ese sentido en el futuro.