Front page | perl.perl6.language |
Postings from August 2006
[svn:perl6-synopsis] r10783 - doc/trunk/design/syn
From:
audreyt
Date:
August 10, 2006 09:40
Subject:
[svn:perl6-synopsis] r10783 - doc/trunk/design/syn
Message ID:
20060810164048.1A62ACB9BB@x12.develooper.com
Author: audreyt
Date: Thu Aug 10 09:40:48 2006
New Revision: 10783
Modified:
doc/trunk/design/syn/S03.pod
doc/trunk/design/syn/S06.pod
Log:
* S03: Signature ~~ Signature now tests for compatibility,
i.e. whether if anything that can bind to LHS can also
bind to RHS.
* S06: The "want" function now returns a Signature object,
instead of a "Context" object with vaguely defined
pseudo-class methods. This also unifies the calling
convention with the returning convention.
Modified: doc/trunk/design/syn/S03.pod
==============================================================================
--- doc/trunk/design/syn/S03.pod (original)
+++ doc/trunk/design/syn/S03.pod Thu Aug 10 09:40:48 2006
@@ -12,9 +12,9 @@
Maintainer: Larry Wall <larry@wall.org>
Date: 8 Mar 2004
- Last Modified: 9 Aug 2006
+ Last Modified: 11 Aug 2006
Number: 3
- Version: 54
+ Version: 55
=head1 Changes to Perl 5 operators
@@ -562,7 +562,9 @@
Num NumRange in numeric range match if $min <= $_ <= $max
Str StrRange in string range match if $min le $_ le $max
Capture Signature parameter binding match if $cap can bind to $sig
- Any Code:() simple closure truth* match if $x() (ignoring $_)
+ Code Signature signature compatibility* match if $_ is a subset of $x
+ Signature Signature signature compatibility match if $_ is a subset of $x
+ Any Code:() simple closure truth* match if $x() (ignoring $_)
Any Class class membership match if $_.does($x)
Any Role role playing match if $_.does($x)
Any Num numeric equality match if $_ == $x
Modified: doc/trunk/design/syn/S06.pod
==============================================================================
--- doc/trunk/design/syn/S06.pod (original)
+++ doc/trunk/design/syn/S06.pod Thu Aug 10 09:40:48 2006
@@ -1763,6 +1763,10 @@
Specifies that the parameter cannot be modified (e.g. assigned to,
incremented). It is the default for parameters.
+$x = 5;
+
+sub f ($x) {}
+
=item C<is rw>
Specifies that the parameter can be modified (assigned to, incremented,
@@ -1880,35 +1884,35 @@
=head2 The C<want> function
-The C<want> function returns an object that contains information about
-the context in which the current block, closure, or subroutine was
+The C<want> function returns a C<Signature> object that contains information
+about the context in which the current block, closure, or subroutine was
called.
-The returned context object is typically tested with a smart match (C<~~>)
-or a C<when>:
+As with normal function signatures, you can test the result of C<want> with a
+smart match (C<~~>) or a C<when>:
given want {
- when Scalar {...} # called in scalar context
- when List {...} # called in list context
- when Lvalue {...} # expected to return an lvalue
- when 2 {...} # expected to return two values
+ when :($) {...} # called in scalar context
+ when :(*@) {...} # called in list context
+ when :($ is rw) {...} # expected to return an lvalue
+ when :($,$) {...} # expected to return two values
...
}
-or has the corresponding methods called on it:
+You can also use the postfix signature syntax to test for compatibility:
+
+ if want:($) {...} # called in scalar context
+ elsif want:(*@) {...} # called in list context
+ elsif want:($ is rw) {...} # expected to return an lvalue
+ elsif want:($,$) {...} # expected to return two values
+
+The C<.arity> method also works here:
- if (want.Scalar) {...} # called in scalar context
- elsif (want.List) {...} # called in list context
- elsif (want.rw) {...} # expected to return an lvalue
- elsif (want.count > 2) {...} # expected to return more than two values
-
-Note these are pseudo type associations. There's no such thing as an
-Lvalue object, and a List is really an unbound argument list object,
-parts of which may in fact be eventually bound into scalar context.
+ if want.arity > 2 {...} # expected to return more than two values
=head2 The C<leave> function
-A C<return> statement causes the innermost surrounding subroutine,
+A C<return> call causes the innermost surrounding subroutine,
method, rule, token, regex (as a keyword), macro, or multimethod
to return. Only declarations with an explicit keyword such as "sub"
may be returned from. You may not return from a quotelike operator such
-
[svn:perl6-synopsis] r10783 - doc/trunk/design/syn
by audreyt