enum Bool
enum Bool <False True>
An enum for Boolean true/false decisions.
Methods
method ACCEPTS
method ACCEPTS(Bool:D: --> Bool:D)
Used for smartmatch comparison. When the right side is True
returns always
True
, when the right side of the match is False
returns always False
.
In particular, ACCEPTS
returns always the instance on which it is invoked,
that is the right side of a smartmatch. As an example:
my $b = Bool.new( True );
# when True on the right side returns
# always True
True ~~ $b; # True
False ~~ $b; # True
$b = Bool.new( False );
# when False on the right side
# returns always False
False ~~ $b; # False
True ~~ $b; # False
routine succ
method succ(--> Bool:D)
Returns True
.
say True.succ; # OUTPUT: «True»
say False.succ; # OUTPUT: «True»
succ
is short for "successor"; it returns the next enum value. Bool is a
special enum with only two values, False
and True
. When sorted, False
comes first, so True
is its successor. And since True
is the "highest"
Bool enum value, its own successor is also True
.
routine pred
method pred(--> Bool:D)
Returns False
.
say True.pred; # OUTPUT: «False»
say False.pred; # OUTPUT: «False»
pred
is short for "predecessor"; it returns the previous enum value. Bool is
a special enum with only two values, False
and True
. When sorted, False
comes first, so False
is the predecessor to True
. And since False
is
the "lowest" Bool enum value, its own predecessor is also False
.
routine enums
method enums(--> Hash:D)
Returns a Hash of enum-pairs. Works on both the Bool
type
and any key.
say Bool.enums; # OUTPUT: «{False => 0, True => 1}»
say False.enums; # OUTPUT: «{False => 0, True => 1}»
routine pick
multi method pick(Bool:U: --> Bool:D)
multi method pick(Bool:U: $count --> Seq:D)
Returns a random pick of True
and/or False
.
If it's called without an argument then it returns just one pick:
say Bool.pick; # OUTPUT: «True»
If it's called with a $count
of one then it returns a Seq with just one pick:
say Bool.pick(1); # OUTPUT: «(False)»
If $count
is *
or greater than or equal to two then it returns a Seq
with two elements -- either True
then False
, or False
then True
:
say Bool.pick(*); # OUTPUT: «(False True)»
routine roll
multi method roll(Bool:U --> Bool:D)
multi method roll(Bool:U $count --> Seq:D)
Returns True
or False
if called without any argument. Otherwise returns
$count
elements chosen at random. Note that each random choice from the
enum
is made independently, like a separate coin toss where each side of the
coin represents one of the two values of the enum
. If *
is passed as
$count
an infinite Seq of Bool
s is returned.
say Bool.roll; # OUTPUT: «True»
say Bool.roll(3); # OUTPUT: «(True False False)»
say Bool.roll(*); # OUTPUT: «(...)»
routine Int
multi method Int(Bool:D --> Int:D)
Returns the value part of the enum
pair.
say False.Int; # OUTPUT: «0»
say True.Int; # OUTPUT: «1»
routine Numeric
multi method Numeric(Bool:D --> Int:D)
Returns the value part of the enum
pair.
say False.Numeric; # OUTPUT: «0»
say True.Numeric; # OUTPUT: «1»
Operators
prefix ?
multi prefix:<?>(Mu --> Bool:D)
Coerces its argument to Bool
.
prefix so
multi prefix:<so>(Mu --> Bool:D)
Coerces its argument to Bool
, has looser precedence than prefix:<?>
.