Author: lwall
Date: 2009-11-20 16:53:45 +0100 (Fri, 20 Nov 2009)
New Revision: 29148

Modified:
   docs/Perl6/Spec/S03-operators.pod
Log:
[S03] fix fossil found by edwin.steiner++
nail down that constants are still constants


Modified: docs/Perl6/Spec/S03-operators.pod
===================================================================
--- docs/Perl6/Spec/S03-operators.pod   2009-11-20 15:41:57 UTC (rev 29147)
+++ docs/Perl6/Spec/S03-operators.pod   2009-11-20 15:53:45 UTC (rev 29148)
@@ -15,7 +15,7 @@
 
     Created: 8 Mar 2004
 
-    Last Modified: 19 Nov 2009
+    Last Modified: 20 Nov 2009
     Version: 178
 
 =head1 Overview
@@ -4330,7 +4330,7 @@
 instead of C<=> as the initializer.  In that case, the left hand side of
 the infix operator will be the variable's prototype object:
 
-    my Dog $fido .= new;      # okay: a constant Dog object
+    my Dog $fido .= new;      # okay: a Dog object
     my Dog $fido = Dog.new;   # same thing
     my Dog $fido = $fido.new; # wrong: invalid self-reference
     my (Dog $fido .= new);    # wrong: cannot use .= inside signature
@@ -4428,11 +4428,20 @@
 
     my constant companion = 'Fido';
     has constant $.pi = 22/7;
-    state constant $latch = snapshot();
+    state constant $latch = snapshot(); # careful with this!
 
-In these cases the explicit scoping determines when the initializer is
-evaluated.
+However, the constant declarator is intended to create values the
+compiler can inline, so it always evaluates its value at BEGIN time.
+Thus, while the extra scope declarator may say where the value is
+stored and when that storage is initialized, it cannot change the value
+of that from instance to instance.  In general, if you want something
+that doesn't vary over the nomral lifetime of a scope declarator,
+initialize it to a readonly value using C<::=> rather than declaring
+it as a constant.  Then each time the scope declarator is used,
+it can initialize to a different readonly value:
 
+    state $latch ::= snapshot();  # each clone gets its own value of $latch
+
 =head1 Argument List Interpolating
 
 PerlĀ 5 forced interpolation of a function's argument list by use of

Reply via email to