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/>.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>

Reply via email to