reformat prototypes in sample code
[p5sagit/Function-Parameters.git] / lib / Function / Parameters.pm
index 1eeae05..f915bc8 100644 (file)
@@ -9,7 +9,7 @@ use Carp qw(confess);
 
 use XSLoader;
 BEGIN {
-       our $VERSION = '0.06';
+       our $VERSION = '0.06_01';
        XSLoader::load;
 }
 
@@ -160,7 +160,9 @@ Function::Parameters - subroutine definitions with parameter lists
  }
  
  # function with prototype
- fun mymap($fun, @args) :(&@) {
+ fun mymap($fun, @args)
+   :(&@)
+ {
    my @res;
    for (@args) {
      push @res, $fun->($_);
@@ -343,18 +345,15 @@ turns into
    ...
  }
 
-except that none of the parameters are in scope in the expressions that specify
-default values. Thus:
+You can even refer to previous parameters in the same parameter list:
 
-  my $var = "outer";
+ print fun ($x, $y = $x + 1) { "$x and $y" }->(9);  # "9 and 10"
 
-  fun foo($var, $wat = $var) {
-    # $wat will default to "outer", not to what was passed
-    # as the first argument!
-    ...
-  }
+This also works with the implicit first parameter of methods:
 
-This may change in a future version of this module.
+ method scale($factor = $self->default_factor) {
+   $self->{amount} *= $factor;
+ }
 
 =item C<check_argument_count>
 
@@ -444,7 +443,11 @@ As an example, the following declaration uses every available feature
 (subroutine name, parameter list, default arguments, prototype, default
 attributes, attributes, argument count checks, and implicit C<$self>):
 
- method foo($x, $y, $z = sqrt 5) :($$$;$) :lvalue :Banana(2 + 2) {
+ method foo($x, $y, $z = sqrt 5)
+   :($$$;$)
+   :lvalue
+   :Banana(2 + 2)
+ {
    ...
  }
 
@@ -462,7 +465,8 @@ And here's what it turns into:
 
 Another example:
 
- my $coderef = fun ($p, $q) :(;$$)
+ my $coderef = fun ($p, $q)
+   :(;$$)
    :lvalue
    :Gazebo((>:O)) {
    ...