Author: larry
Date: Thu Jan 17 13:18:31 2008
New Revision: 14491
Modified:
doc/trunk/design/syn/S02.pod
Log:
Define truthiness of standard types.
Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod (original)
+++ doc/trunk/design/syn/S02.pod Thu Jan 17 13:18:31 2008
@@ -12,9 +12,9 @@
Maintainer: Larry Wall <[EMAIL PROTECTED]>
Date: 10 Aug 2004
- Last Modified: 10 Jan 2008
+ Last Modified: 17 Jan 2008
Number: 2
- Version: 125
+ Version: 126
This document summarizes Apocalypse 2, which covers small-scale
lexical items and typological issues. (These Synopses also contain
@@ -3015,6 +3015,29 @@
return 0 but True;
+=item *
+
+The definition of C<.true> for the most ancestral type (that is, the
+C<Object> type) is equivalent to C<.defined>. Since protoobjects are
+considered undefined, all protoobjects (including C<Object> itself)
+are false unless the type overrides the definition of C<.true>
+to include undefined values. Instantiated objects default to true
+unless the class overrides the definition. Note that if you could
+instantiate an C<Object> it would be considered defined, and thus true.
+(It is not clear that this is allowed, however.)
+
+=item *
+
+In general any container types should return false if they are empty,
+and true otherwise. This is true of all the standard container types
+except Scalar, which always defers the definition of truth to its
+contents. Non-container types define truthiness much as Perl 5 does.
+
+Just as with the standard types, user-defined types should feel free
+to partition their defined values into true and false values if such
+a partition makes sense in control flow using boolean contexts, since
+the separate C<.defined> method is always there if you need it.
+
=back
=head1 Lists