Re: RFC 118 (v1) lvalue subs: parameters, explicit assignment, andwantarray() changes

[email protected] (Damian Conway) Thu, 24 Aug 2000 05:38:33 +1000 (EST)
Newsgroups perl.perl6.language.subs
Message-ID <[email protected]>
   > So if all I want to do is make sure that certain attributes are positive
   > integers, I have to do this:
   > 
   >	[ admittedly ungainly solutions snipped ]
   >
   > I'd much prefer a solution where the positive-only logic was in a method
   > belonging to the class, rather than being attached to afflicted attributes.
   > The only ways I can see of doing this are like Gnat or Andy's RFCs.

TMTTWTDO! ;-)

What you really want is a postcondition or class invariant.
One that asserts that x is always positive:

   sub new { bless {}, $_[0] }
   sub x   { lreturn $_[0]->{x} }

   # and one of...

   post x  { $_[0]->{x} >= 0 }		# post condition on x attribute
   ensure  { $_[0]->{x} >= 0 }		# class invariant
	

Damian