in reply to Re^21: Assignable Subroutines
in thread Assignable Subroutines

I don't know why the “parametrizable” never registered regardless of my repeated mention.

  1. How are you going to define a type for reals in the range 0.0 to 1.0?
  2. And another for those in the range -1.0 to +1.0?
  3. And another for integers that can be (-1|0|+1)?
  4. And another for dates this year? This month? This century?
  5. And another for daytimes? Nighttimes? Weekends? First days of the month?
  6. And one for 3-char strings? and 4-chars strings? and 5-char strings? And lowercase 3-char strings? and uppercase 3-char strings? And lowercase, 3-char strings that begin with 'a'? And lowercase 3-char strings that begin with 'b'? …or 'c'? …or 'd'?
  1. my $foo is Real( 0.0, 1.0 );
  2. my $foo is Real( -1.0, 1.0 );
  3. my $foo is InSet( -1, 0, -1 );
  4. my $foo is DateTime( year => DateTime.now.truncate( to => 'year' ) ); # ...
  5. my $foo is DateTime( hour => [ 8 .. 22 ] ); # ...
  6. my $foo is String( len => 3 ); # ...
    my $foo is String( match => /\A a [[:lower:]]{2} \z/ ); # ...

For the Real constructor I could even imagine some syntax like qw( ] 0.0 - 1.0 ] ) (I don't remember which dingbats we'll use in Perl6 for qw//) which would define a range from 0.0 exclusive to 1.0 inclusive — just like the mathematical notation.

Use your imagination. Did I mention declarative programming is bliss for maintainers?

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^23: Assignable Subroutines
by BrowserUk (Patriarch) on Jan 27, 2005 at 19:51 UTC

    Okay, now extend those to allow any integer if

    $self->anotherAttrib == 3;

    With the validation inline, it has complete access to everything that the sub has access to.

    And 90% of all those specialist traits are just single lines of Perl blown up into complicated layers of abstraction, that will never be reused, and serve only to add complexity, where none is warrented.


    Examine what is said, not who speaks.
    Silence betokens consent.
    Love the truth but pardon error.

      complicated layers of abstraction, that will never be reused, and serve only to add complexity, where none is warrented.

      Obviously!

      Also, see Re^18: Assignable Subroutines for how a setter might be attached inline to handle your stateful validation requirement.

      Makeshifts last the longest.