Le mardi 10 mars 2015 17:56:40 UTC+1, Mauro a écrit :
>
> >> Have a look at stagedfunction (v0.4).
> >>
> > I tried with the nightly build, but without success (using
> stagedfunction
> > instead of function) - however, it looks like it is the solution, maybe
> I
> > will just have to wait until this is implemented (and the syntax set).
>
> You will need to adapt the code to work with stagedfunctions. They work
> in stages: with the types of the arguments the code for the actual
> function is produced. Sadly there is no documentation, I think. See:
> https://github.com/JuliaLang/julia/issues/7311
> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2FJuliaLang%2Fjulia%2Fissues%2F7311&sa=D&sntz=1&usg=AFQjCNETI73h5HytMQQq4nzKEDmxDL2NBg>
>
>
> >> > The only other way (I can think of) to get this result would be to
> use
> >> > macros and enumerate the different possible types, but if somebody
> can
> >> > think of a better solution, thanks!
> >>
> >> why not write:
> >> type typeB1 <: typeB end
> >> type typeB2 <: typeB end
> >> compute(a::typeB, b::typeB) = return (a, b)
> >>
> > Because I would like to ensure that a and b are of the same type
>
> In that case use:
>
> compute{T<:typeB}(a::T, b::T) = return (a, b)
>
> T will be set to the concrete type of a and there will be a no-method
> error if isa(b,T) is not true.
>
This is my fault - I did not the code generic enough. In my case, I would
like to use different type transform functions, e.g.
function compute{T<:typeA}(a::transformTypeA(T), b::transformTypeB(T))
return (a, b)
end
I am not sure though staged function are the way to go - I tried to follow
some examples, and I would have to make tests on the types (which is not
the purpose - I just want to do early error checking by ensuring types are
compatible) before returning several version of the function depending on
the types.
Thanks for all your answers,
benjamin