Thank you very much guys. I think, now I can understand what is going on with method adding:) Best, Mark
2014-07-18 12:09 GMT+02:00 Esteban Lorenzano <esteba...@gmail.com>: > also you will still have an error if using the RBNamespace instead the > direct method invocation, if class does not exist. > So… I stand with my opinion :) > > If you want to control existence, you could do something like this: > > #Model asClassIfPresent: [ :class | > class compile: 'asString ^ String empty' classified: #accessing ] > > Esteban > > On 18 Jul 2014, at 11:19, Guillermo Polito <guillermopol...@gmail.com> > wrote: > > But wait. What happens here is that we are mixing concepts. > > 1) On one side, there is Pharo's class model (the one we program with) => > classes, metaclasses, methods. Let's call them the *real* classes and > methods. So if you want to add a method to your *real* class, you usually > have to > > - compile a method > - add it to the method dictionary of the class > > There are some helper methods that do all the work in one step, as > mentioned by Esteban: > > myClass compile: someCode classified: aProtocolName. > > > That, is what happens when you use the browser (Nautilus in our case). > > > 2) On the other side, there is the Refactoring browser framework (that is, > all classes prefixed as RB (except the AST nodes now)). The refactoring > browser implements refactorings (renames of classes and methods, pushing > up/down instance variables in a hierarchy, extracting methods into > classes). Of course, to apply these refactoring it uses the model and API's > provided by 1). But it's a completely different monster. > > That means, adding a RBMethod in a RBClass does not mean that you are > adding a *real* method into a *real* class. That will not happen unless > that change is inside a refactoring and you apply the refactoring. > > > > On Fri, Jul 18, 2014 at 3:43 AM, Ben Coman <b...@openinworld.com> wrote: > >> This might be a good example to add to Deep Into Pharo (but I haven't >> read it yet, so its too much for me right now to work out where it should >> go). Anyone interested in doing this? Otherwise maybe I could drop it into >> a scratchpad at the back of the book. >> cheers -ben >> >> >> Hernán Morales Durand wrote: >> >> Yes you need it because when doing code generation you cannot always >> assume target class is present. Besides using RB you can confirm through >> the NautilusRefactoring which is useful for massive changes: >> >> | model | >> model := RBNamespace new. >> (model classNamed: #Model) >> compile: 'asString ^ String empty' >> classified: #(accessing). >> (ChangesBrowser changes: model changes changes) openWithSpec >> >> Cheers, >> >> Hernán >> >> >> 2014-07-17 13:55 GMT-03:00 Esteban Lorenzano <esteba...@gmail.com>: >> >>> Hi, >>> >>> you do not need the RBNamespace mediation, just do: >>> >>> Model compile: ‘method ...’ classified: ‘accessing’. >>> >>> Esteban >>> >>> On 17 Jul 2014, at 18:52, Mark Rizun <mri...@gmail.com> wrote: >>> >>> Thanks Hernan >>> 17 лип. 2014 18:29, користувач "Hernán Morales Durand" < >>> hernan.mora...@gmail.com> написав: >>> >>>> No. Adding a method is not a refactoring. You should use >>>> RBAddMethodChange: >>>> >>>> | model | >>>> model := RBNamespace new. >>>> (model classNamed: #Model) >>>> compile: 'asString ^ String empty' >>>> classified: #(accessing). >>>> model changes execute. >>>> >>>> and the new method is recorded in the .changes file >>>> >>>> Cheers, >>>> >>>> Hernán >>>> >>>> >>>> >>>> 2014-07-17 11:08 GMT-03:00 Mark Rizun <mri...@gmail.com>: >>>> >>>>> Thank you all. Problem is solved, I just used RBAddMethodRefactoring. >>>>> >>>>> Mark >>>>> >>>>> >>>>> 2014-07-17 16:07 GMT+02:00 Baptiste Quide <baptiste.qu...@inria.fr>: >>>>> >>>>> I think you have to add a "RGMethodDefinition" or a "CompiledMethod". >>>>>> Obviously in a class methodDict the values are CompiledMethod. >>>>>> >>>>>> Regards, >>>>>> >>>>>> ------------------------------ >>>>>> >>>>>> *De: *"Sebastian Tleye" <stl...@gmail.com> >>>>>> *À: *"Any question about pharo is welcome" < >>>>>> pharo-users@lists.pharo.org> >>>>>> *Envoyé: *Jeudi 17 Juillet 2014 16:03:52 >>>>>> *Objet: *Re: [Pharo-users] Adding method to class >>>>>> >>>>>> >>>>>> I don't know what RBMethod is, but you can do >>>>>> >>>>>> aClass compile: source. >>>>>> >>>>>> For example: >>>>>> >>>>>> Array compile: 'newMethod ^ 1' >>>>>> >>>>>> I don't know if it answers your question. >>>>>> >>>>>> Regards >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 2014-07-17 15:57 GMT+02:00 Mark Rizun <mri...@gmail.com>: >>>>>> >>>>>>> P.S. obviously, my method is added to newMethods var, but it is not >>>>>>> disblayed in my class. >>>>>>> >>>>>>> >>>>>>> 2014-07-17 15:53 GMT+02:00 Mark Rizun <mri...@gmail.com>: >>>>>>> >>>>>>> Hi guys! >>>>>>>> >>>>>>>> How can I add method (I have /RBMethod/) to a class in code? >>>>>>>> I'm asking because existing method /addMethod:/ in >>>>>>>> /RBAbstractClass/ isn't >>>>>>>> working. >>>>>>>> Here is a piece of my code: >>>>>>>> >>>>>>>> /method:= RBMethod for: class source: ('^ ', newName asString) >>>>>>>> selector: >>>>>>>> newName asSymbol. >>>>>>>> class addMethod: getter./ >>>>>>>> >>>>>>>> Best >>>>>>>> Mark >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> View this message in context: >>>>>>>> http://forum.world.st/Adding-method-to-class-tp4768282.html >>>>>>>> Sent from the Pharo Smalltalk Users mailing list archive at >>>>>>>> Nabble.com <http://nabble.com/>. >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> >> > >