On Wed, 19 Oct 2005, Christophe Grandsire wrote:

> I find it a great idea to use modules for cuts to. A genial way to minimise the
> amount of new features to implement and learn!

Thank you for the kind words!

> So I don't have to worry that subclasses would suddenly behave differently from
> their parents without explicit overriding. Cool.
>
> That said, I'm suddenly thinking that sometimes one would rather want to
> subclass the class as it stands without its aspects. If I'm thinking for
> instance of the issue of logging. The way it stands now, if the parent class
> gets a logger cut, the subclass suddenly gets logging functionality *in the
> middle of its overridden methods*, when they use super, whereas one would
> rather expect the logging aspect to be *external* to the implementation of the
> subclass (if it is to be there at all). I hope I'm making myself clear. I have
> difficulties to express my thoughts in words today...

I think I know what you mean. I think this can be done with a bit of 
library support. The following should do what you want it to do, and it 
can surely be done automatically by a library:

   class A
     def do_transaction ; ... ; end
   end

   class B < A
     def do_transaction
       do_some_stuff
       super
     end
   end

   module CutMixin
     def do_transaction
       do_logging if Thread.current['InsideLogger']
       old = Thread.current['ACut::InsideLogger']
       Thread.current['ACut::InsideLogger'] = true
       super
       Thread.current['ACut::InsideLogger'] = old
       do_logging if Thread.current['InsideLogger']
     end
   end

   cut ACut < A
     include ACutMixin
   end

   cut BCut< B
     include ACutMixin
   end

> What do you think? I like the way cuts act in a really transparent way, and that
> when subclassing one needn't know about the existence of cuts, but I'm now
> wondering whether it could be a problem in some cases when the aspect should
> really stay external to the implementation of classes... Do you have a way to
> solve that problem already?
> 
>> Note: if you use the patch, the keyword 'cut' is named '__cut__'. This is
>> because the Tk library uses 'cut' as a method name and it fails the tests
>> otherwise.
>>
>
> I hope this small problem won't prevent the RCR to be accepted.
> --
> Christophe Grandsire.
>
> http://rainbow.conlang.free.fr
>
> It takes a straight mind to create a twisted conlang.

Peter