Todd W. writes:
> I have a question/request concerning perl6 object properties.

Rather, attributes.  Properties are out-of-band data attached to a
particular object.

> I've done some work with .NET and They have come up with a really slick way
> to handle object properties.
> 
> A typical property definition in VB.NET looks like:
> 
> Public Property description() As String
>   Get
>     return aString
>   End Get
>   Set(ByVal Value As String)
>     ' set value
>   End Set
> End Property
> 
> You can use it like this:
> 
> oObj.description = sDescr ' calls setter
> sDescr = oObj.description ' calls getter
> 
> This allows proper encapsulation of object properties while providing a very
> clean interface. A corollary feature is that properties can map to arbitrary
> values. I've written object property definitions that read and write
> directly to relational databases, and Ive written read only properties that
> abstract XPath queries to config files.
>
> My main interest in the feature is using the assignment operator to assign
> to object properties.

Okay, this has been thought through.  It's the way lvalue subs are going
to be pulled off in the more complex cases.  

I can't remember the exact syntax, but it goes something like:

    sub assign_to_me() is rw {
        my $ret is class { STORE { print "I was assigned to!\n" } }
    }

(Note that ret is both being created and returned in the same
expression)

Admittedly, that's a bit of a kludge, so there may be some syntax to
sugar it up.  I'd suggest an omitted C<do> property, with two additional
properties: C<fetch> and C<store>.

    sub assign_to_me() is rw
        will fetch { print "I was read from!\n" }
        will store { print "I was assigned to!\n" }
    {...} 

Not to worry, as this is a nice thing to be able to do, it will be easy.

Luke

> I posted a question to CLPM on how to do this with perl5 and we decided to
> use an 'lvalue' attribute on the subroutine and then make the returned
> lvalue in the sub a tied variable to intercept read/writes:
> 
> http://groups.google.com/groups?th=5489106ee6715c8e
> 
> It works, but its obviously slow and can get confusing for anything
> moderately complex.
> 
> I just thought I would share this and see if anything similar can fit in the
> perl6 OO syntax.
> 
> Todd W.

Reply via email to