So that is the hacky way that you can do this. Not sure if it's a good idea – it's possible that it will be crashy to do that, especially if you're going to replace the method and then call it.
On Tue, Jun 30, 2015 at 6:08 PM, Yichao Yu <[email protected]> wrote: > On Tue, Jun 30, 2015 at 5:50 PM, Stefan Karpinski <[email protected]> > wrote: > > A good approach to that specific issue would be for us to provide hooks > into > > srand, allowing other packages to register callbacks with the same > > signature. As to the original question, while you can pull individual > > methods out of generic functions, you can't call them, so there's no way > to > > do this currently. > > Method.func is actually callable but I guess it's a bad idea to do that. > > > > > On Tue, Jun 30, 2015 at 5:35 PM, 'Deniz Yuret' via julia-users > > <[email protected]> wrote: > >> > >> Thanks! I guess my rand() example was not a good example. The actual > use > >> case was trying to get srand to set the seed for the gpu as well as the > cpu. > >> I thought if I could override the srand function (so the user does not > need > >> to remember a new name), and have it call the original srand as well as > the > >> gpu srand that would be a good solution. As things stand, (1) I can > use a > >> different name, (2) I can create an srand specific to my module > following > >> Matt's suggestion (do I then export this or have people call > >> MyModule.srand()?), (3) I can look at what the original srand does and > copy > >> it into the new function. > >> > >> However more generally, if I understand correctly, once a function in a > >> module is imported and redefined, there is no way to access the original > >> definition. Please correct me if I am wrong. > >> > >> best, > >> deniz > >> > >> > >> On Tue, Jun 30, 2015 at 2:17 PM Stefan Karpinski <[email protected]> > >> wrote: > >>> > >>> Overwriting methods in Base is a bad idea. This will affect all usages > of > >>> the function, not just the ones in your module. You can have your own > >>> function called rand() instead. > >>> > >>> On Tue, Jun 30, 2015 at 3:43 PM, Matt Bauman <[email protected]> > wrote: > >>>> > >>>> Note the warning message you get upon trying to define Base.rand(): > >>>> Warning: Method definition rand() in module Random at random.jl:195 > >>>> overwritten in module Main at none:1 > >>>> > >>>> You're not shadowing rand; you're totally overwriting one of its main > >>>> methods. I agree with Tom that you should probably use a different > name, > >>>> but if you really wanted to, you could actually shadow the name: > >>>> > >>>> julia> rand() = Base.rand() + 1 # Note that this will only work if you > >>>> haven't used Base.rand in your module or session yet. > >>>> rand (generic function with 1 method) > >>>> > >>>> julia> rand() > >>>> 1.9306557841053391 > >>>> > >>>> julia> Base.rand() > >>>> 0.8691479006333791 > >>>> > >>>> > >>>> On Tuesday, June 30, 2015 at 3:07:30 PM UTC-4, Deniz Yuret wrote: > >>>>> > >>>>> Say we import and redefine a function from Base. Is it possible to > >>>>> access the form of the function before the redefinition? > >>>>> > >>>>> Here is an example of what I am trying to do (which doesn't work): > >>>>> > >>>>> rand_orig = rand > >>>>> Base.rand()=(rand_orig() + 1) > >>>>> > >>> > > >
