On Sunday, May 12, 2002, at 02:18 PM, Miko O'Sullivan wrote: >> While thinking Eiffel-ish thoughts the other day, I began to wonder if >> Perl6's classes could go beyond the simple private/public/protected >> scheme by optionally allowing for a property or method to only be >> accessed by a certain set of classes. > > Many times when I've used OO languages I've wished for something like > this. > What I've often wanted would be standard method that is called before > every > subroutine call. If that method returns false then the method that was > called is not called.
I think maybe what you're looking for is another Eiffel/Sather-ism. I know Eiffel at least has both pre and post-conditions that look something like this(it's been a while, so if this isn't quite right): class ACCOUNT creation make_with_balance feature { BANK } balance: INTEGER make_with_balance(initial_balance: INTEGER) is require initial_balance >= 0 do balance := initial_balance ensure balance >= 0 end end I too have thought this might be useful in Perl6. Perhaps... class Account { my INT $balance; method new(INT $initial_balance //= 0) { REQUIRE { $initial_balance >= 0; } $.balance = $initial_balance; ENSURE { $.balance >= 0; } } }