Author: lwall
Date: 2009-03-04 23:30:37 +0100 (Wed, 04 Mar 2009)
New Revision: 25693
Modified:
docs/Perl6/Spec/S12-objects.pod
Log:
clarify enum vs sub for moritz++
Modified: docs/Perl6/Spec/S12-objects.pod
===================================================================
--- docs/Perl6/Spec/S12-objects.pod 2009-03-04 22:27:08 UTC (rev 25692)
+++ docs/Perl6/Spec/S12-objects.pod 2009-03-04 22:30:37 UTC (rev 25693)
@@ -14,7 +14,7 @@
Date: 27 Oct 2004
Last Modified: 4 Mar 2009
Number: 12
- Version: 72
+ Version: 73
=head1 Overview
@@ -1293,7 +1293,7 @@
An enum is a low-level class that can function as a role or property.
A given enum value can function as a subtype, a method, or as an ordinary
-value (an argumentless sub). The names of the values are specified as a list:
+value. The names of the values are specified as a list:
my enum Day ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
my enum Day <Sun Mon Tue Wed Thu Fri Sat>;
@@ -1411,7 +1411,6 @@
$x.does(day)
$x.day == Tue
day($x) == Tue
- Tue($x)
$x.Tue
all return true, and
@@ -1436,6 +1435,23 @@
type C<bit>. Never compare a value to "C<true>", or even "C<True>".
Just use it in a boolean context.
+Like type names, enum names are parsed as standalone tokens
+representing scalar values, and don't look for any arguments.
+Unlike type names which are undefined protoobjects, enums are defined
+constant values. Also unlike types, they do not respond to C<.()>.
+They may not be post-declared.
+
+ our enum Maybe <OK FAIL>;
+ sub OK {...}
+ $x = OK; # certainly the enum value
+ $x = OK() # certainly the function
+
+Since there is an enum OK, the function OK may only be
+called using parentheses, never in list operator form. (If there is
+a collision on two enum values that cancels them both, the function
+still may only be called with parentheses, since the enum symbol
+is "poisoned".)
+
Enum types (and perhaps certain other finite, enumerable types such
as finite ranges) define a C<.pick> method on the protoobject of
that type. Hence: