This looks like an elegant solution. Are you confirming that there's no way
for a method inside "class Chameleon" to achieve the goal?   Just by moving
method out to a trait, it becomes aware of all the inherited and
implemented props?  Not bad...

THANKS!  this list has been really awesome for learning.

Gerald R. Wiltse
[email protected]


On Mon, Feb 29, 2016 at 4:30 AM, Dinko Srkoč <[email protected]> wrote:

> I know this is not exactly what you asked, but would something like
> this work for you?
>
>     class Chameleon{ String color = "green" }
>
>     trait ColorChanging {
>         String lastColor
>         def changeColor = {newcolor ->
>             lastColor = this.color
>             this.color = newcolor
>         }
>     }
>
>     trait MyProps {
>         void printAllMyProperties(){
>             this.properties.each{println it}
>         }
>     }
>
>     def mylizard = new Chameleon().withTraits(ColorChanging, MyProps)
>
>     mylizard.changeColor('blue')
>
>     mylizard.printAllMyProperties()
>     mylizard.properties.each{println it}
>
> Cheers,
> Dinko
>
> On 29 February 2016 at 03:23, Gerald Wiltse <[email protected]> wrote:
> > Is there a way for the Chameleon class to ever see that it has a
> "lastColor"
> > property?
> >
> > class Chameleon{
> >     String color = "green"
> >
> >     void printAllMyProperties(){
> >          this.properties.each{println it}
> >     }
> >
> > }
> >
> > trait ColorChanging {
> >     String lastColor
> >     def changeColor = {newcolor ->
> >         lastColor = this.color
> >         this.color = newcolor
> >     }
> > }
> >
> > def mylizard = new Chameleon().withTraits(ColorChanging)
> >
> > mylizard.changeColor(blue)
> >
> > mylizard.printAllMyProperties()
> > mylizard.properties.each{println it}
> >
> > The outputs of the two above lines don't match. lastColor isn't available
> > from inside the class.
> >
> > This seems like it should be possible, but I tried several things
> including
> > the declaredFields property and could not get the desired effect.
> >
> > In this script, I'm looking for a way for my instance to reference all
> the
> > properties it's received from the trait. I guess it's same situation with
> > inheritance, and properties added by propertymissing.
> >
> >
> >
> >
> > Gerald R. Wiltse
> > [email protected]
> >
>

Reply via email to