Method definitions aren't the same as type instances. There isn't a "sin" object which "stores" all the function definitions. It's more like "sin" is an arbitrary verb in some scope, and the scoping rules can map a verb to a method definition using its surrounding context.
In short, don't think of method names as nouns (objects), think of them as verbs. In this metaphor, the module (or other enclosing scope) is the "dictionary" where your verb is defined. On Thu, Jul 23, 2015 at 4:37 PM, Yichao Yu <[email protected]> wrote: > On Thu, Jul 23, 2015 at 4:25 PM, Vinuth Madinur > <[email protected]> wrote: > > However, is there a reason why a simpler way to extend methods isn't > > f() = ... extend the method f even if f is a local variable. > > > provided? While one can "read" methods from a function, lack of "write" > > support to modify / add / delete methods from a generic function makes me > > curious. > > Because extending method shouldn't be something that you usually want > to do dynamically. > > > > > > > On Friday, July 24, 2015 at 1:49:42 AM UTC+5:30, Vinuth Madinur wrote: > >> > >> Cool. Had missed the module part. So they give an accessible isolated > >> scope. > >> This should do it. > >> > >> Thanks for the help! > >> > >> > >> On Friday, July 24, 2015 at 1:43:16 AM UTC+5:30, Tom Breloff wrote: > >>> > >>> So... you want a method name globally accessible, but you don't want to > >>> put in global scope? Maybe you should use a Module instead of a let > block. > >>> Your first method definition goes in the scope of "MyModule", and then > later > >>> on you can add to that method definition by defining a function: > >>> "MyModule.myFunction(x::MyType) = ..." > >>> > >>> See: http://julia.readthedocs.org/en/latest/manual/modules/ > >>> > >>> On Thursday, July 23, 2015 at 4:08:45 PM UTC-4, Vinuth Madinur wrote: > >>>> > >>>> Please ignore the "anonymous function" part above. > >>>> > >>>> I'm creating a function in my macro inside a let block so that it > >>>> doesn't pollute the surrounding scope. Later on, when the same macro > is used > >>>> on a different expression, I wont be able to access this same > function to > >>>> extend it inside another let block. I was looking for a way to do > this. > >>>> > >>>> > >>>> > >>>> On Friday, July 24, 2015 at 1:12:36 AM UTC+5:30, Vinuth Madinur wrote: > >>>>> > >>>>> It's a little complicated scenario to explain. It's like this: > >>>>> > >>>>> I have a macro that replaces an expression with a function whose name > >>>>> isn't fixed / known / is anonymous / created inside a closured > scope. Later > >>>>> on I want the ability to add methods to this. > >>>>> > >>>>> > >>>>> > >>>>> On Friday, July 24, 2015 at 12:57:01 AM UTC+5:30, Tom Breloff wrote: > >>>>>> > >>>>>> Can you tell us more about your end-goal? I have a feeling that > >>>>>> you're not thinking about this in a Julian way, but I'm not > entirely sure > >>>>>> what you want to be able to do. > >>>>>> > >>>>>> On Thu, Jul 23, 2015 at 3:21 PM, Vinuth Madinur < > [email protected]> > >>>>>> wrote: > >>>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> Is there a way to add a method to a generic function during > runtime? > >>>>>>> Or to merge two generic functions? For example: > >>>>>>> > >>>>>>> > >>>>>>> function abc end > >>>>>>> function xyz end > >>>>>>> > >>>>>>> function add_method(method, func) > >>>>>>> #Add method to func > >>>>>>> end > >>>>>>> > >>>>>>> add_method(xyz) do x::Int > >>>>>>> x*2 > >>>>>>> end > >>>>>>> > >>>>>>> or > >>>>>>> > >>>>>>> add_method(x -> x * 4, abc) > >>>>>>> > >>>>>>> > >>>>>>> Thanks, > >>>>>>> Vinuth. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > > >
