It's considered a no-no to call Base.return_types from code:
https://github.com/JuliaLang/julia/pull/12292#issuecomment-124322950

However, my PR expunging it (https://github.com/JuliaLang/julia/pull/12409) 
has not gotten any interest from those who objected, so I'm certain how 
serious they are ;-).

--Tim


On Friday, September 18, 2015 05:58:03 AM Michael Francis wrote:
> I should probably submit a PR to add - the extra info
> 
> On Friday, September 18, 2015 at 8:50:35 AM UTC-4, Tomas Lycken wrote:
> > In this specific use case I don't need to handle anonymous functions, so
> > `Base.return_types` will probably do just fine.
> > 
> > It's not documented, though, so searching in the docs didn't turn anything
> > up (and even though I guess it must have been used on this list, my search
> > terms apparently weren't good enough to find it.
> > 
> > Thanks!
> > 
> > // T
> > 
> > On Friday, September 18, 2015 at 2:42:47 PM UTC+2, Michael Francis wrote:
> >> Yes in the sense it hands anon functions
> >> 
> >> On Friday, September 18, 2015 at 8:41:16 AM UTC-4, Mauro wrote:
> >>> Is that better than Base.return_types ?
> >>> 
> >>> On Fri, 2015-09-18 at 14:36, Michael Francis <[email protected]>
> >>> 
> >>> wrote:
> >>> > function returns(f, types)
> >>> > 
> >>> >   rt = []
> >>> >   if( !isdefined(f, :code) )
> >>> >   
> >>> >     for x in Base._methods(f,types,-1)
> >>> >     
> >>> >         linfo = x[3].func.code
> >>> >         (tree, ty) = typeinf(linfo, x[1], x[2])
> >>> >         push!(rt, ty)
> >>> >     
> >>> >     end
> >>> >   
> >>> >   else
> >>> >   
> >>> >     # It is a lambda, not a function, we also need the types of the
> >>> 
> >>> bound
> >>> 
> >>> >     # variables to evaluate the lambda corectly
> >>> >     println( types )
> >>> >     linfo = f.code
> >>> >     env = f.env
> >>> >     (tree, ty) = typeinf(linfo, types, () )
> >>> >     push!(rt, ty)
> >>> >   
> >>> >   end
> >>> >   # If there is a set of return types we default to any for now
> >>> >   # this could be converted to a union type
> >>> >   if( length( rt ) == 0 )
> >>> >   
> >>> >     println( "Failed to resolve return type for $f, $types")
> >>> >   
> >>> >   elseif( length(rt) > 1 )
> >>> >   
> >>> >     return Any
> >>> >   
> >>> >   else
> >>> >   
> >>> >     return rt[1]
> >>> >   
> >>> >   end
> >>> > 
> >>> > end
> >>> > 
> >>> > 
> >>> > 
> >>> > The above is what I do - which also copes with anon-functions
> >>> > 
> >>> > On Friday, September 18, 2015 at 8:32:45 AM UTC-4, Tomas Lycken wrote:
> >>> >> Given a function `foo(x,y)` and two *types* `TX` and `TY`, is there a
> >>> 
> >>> way
> >>> 
> >>> >> I can get the inferred return type from calling `foo(x::TX, y::TY)`?
> >>> 
> >>> I want
> >>> 
> >>> >> to do this in the compile part of a generated function, so I don't
> >>> 
> >>> have
> >>> 
> >>> >> access to any values to actually call the function with.
> >>> >> 
> >>> >> I have already verified that the function `foo` is type stable, so
> >>> 
> >>> the
> >>> 
> >>> >> inferred type should be good enough for my purposes.
> >>> >> 
> >>> >> Thanks,
> >>> >> 
> >>> >> // T

Reply via email to