class Allomorph
class Allomorph is Str { }
The Allomorph
class is a common parent class for Raku's
dual value types: ComplexStr,
IntStr, NumStr,
RatStr.
The dual value types (often referred to as allomorphs) allow for the representation of a value as both a string and a numeric type. Typically they will be created for you when the context is "stringy" but they can be determined to be numbers, such as in some quoting constructs:
my $c = <42+0i>; say $c.^name; # OUTPUT: Ā«ComplexStrā¤Ā»
my $i = <42>; say $i.^name; # OUTPUT: Ā«IntStrā¤Ā»
my $n = <42.1e0>; say $n.^name; # OUTPUT: Ā«NumStrā¤Ā»
my $r = <42.1>; say $r.^name; # OUTPUT: Ā«RatStrā¤Ā»
As a subclass of both a Numeric class and
Str, via the Allomorph
class, an allomorph will be
accepted where either is expected. However, an allomorph does not share
object identity with its Numeric parent class- or Str-only variants:
my ($complex-str, $int-str, $num-str, $rat-str)
= < 42+0i 42 42e10 42.1 >;
my (Complex $complex, Int $int, Num $num, Rat $rat)
= $complex-str, $int-str, $num-str, $rat-str; # OK!
my Str @strings
= $complex-str, $int-str, $num-str, $rat-str; # OK!
# ā operator cares about object identity
say 42+0i ā < 42+0i 42 42e10 42.1 >; # OUTPUT: Ā«Falseā¤Ā»
say 42 ā < 42+0i 42 42e10 42.1 >; # OUTPUT: Ā«Falseā¤Ā»
say 42e10 ā < 42+0i 42 42e10 42.1 >; # OUTPUT: Ā«Falseā¤Ā»
say 42.1 ā < 42+0i 42 42e10 42.1 >; # OUTPUT: Ā«Falseā¤Ā»
Please see the Numerics page for a more complete description on how to work with these allomorphs.
Methods
method ACCEPTS
multi method ACCEPTS(Allomorph:D: Any:D \a)
If the a
parameter is Numeric (including
another allomorph),
checks if invocant's Numeric value
ACCEPTS a
.
If the a
parameter is Str, checks if invocant's
Str value ACCEPTS a
.
If the a
parameter is anything else, checks if both
Numeric and Str values of the invocant
ACCEPTS
a
.
say "5.0" ~~ <5>; # OUTPUT: Ā«Falseā¤Ā»
say 5.0 ~~ <5>; # OUTPUT: Ā«Trueā¤Ā»
say <5.0> ~~ <5>; # OUTPUT: Ā«Trueā¤Ā»
method Bool
multi method Bool(::?CLASS:D:)
Returns False
if the invocant is numerically 0
, otherwise returns
True
. The Str value of the invocant is not considered.
Note: For the Allomorph
subclass RatStr also
see Rational.Bool.
method chomp
method chomp(Allomorph:D:)
Calls Str.chomp on the invocant's Str value.
method chop
method chop(Allomorph:D: |c)
Calls Str.chop on the invocant's Str value.
method comb
method comb(Allomorph:D: |c)
Calls Str.comb on the invocant's Str value.
method fc
method fc(Allomorph:D:)
Calls Str.fc on the invocant's Str value.
method flip
method flip(Allomorph:D:)
Calls Str.flip on the invocant's Str value.
method lc
method lc(Allomorph:D:)
Calls Str.lc on the invocant's Str value.
method pred
method pred(Allomorph:D:)
Calls Numeric.pred on the invocant's numeric value.
method raku
multi method raku(Allomorph:D:)
Return a representation of the object that can be used via EVAL to reconstruct the value of the object.
method samecase
method samecase(Allomorph:D: |c)
Calls Str.samecase on the invocant's Str value.
method samemark
method samemark(Allomorph:D: |c)
Calls Str.samemark on the invocant's Str value.
method split
method split(Allomorph:D: |c)
Calls Str.split on the invocant's Str value.
method Str
method Str(Allomorph:D:)
Returns the Str value of the invocant.
method subst
method subst(Allomorph:D: |c)
Calls Str.subst on the invocant's Str value.
method subst-mutate
method subst-mutate(Allomorph:D \SELF: |c)
Calls Str.subst-mutate on the invocant's Str value.
method substr
method substr(Allomorph:D: |c)
Calls Str.substr on the invocant's Str value.
method substr-rw
method substr-rw(Allomorph:D \SELF: $start = 0, $want = Whatever)
Calls Str.substr-rw on the invocant's Str value.
method succ
method succ(Allomorph:D:)
Calls Numeric.succ on the invocant's numeric value.
method tc
method tc(Allomorph:D:)
Calls Str.tc on the invocant's Str value.
method tclc
method tclc(Allomorph:D:)
Calls Str.tclc on the invocant's Str value.
method trim
method trim(Allomorph:D:)
Calls Str.trim on the invocant's Str value.
method trim-leading
method trim-leading(Allomorph:D:)
Calls Str.trim-leading on the invocant's Str value.
method trim-trailing
method trim-trailing(Allomorph:D:)
Calls Str.trim-trailing on the invocant's Str value.
method uc
method uc(Allomorph:D:)
Calls Str.uc on the invocant's Str value.
method WHICH
multi method WHICH(Allomorph:D:)
Returns an object of type ValueObjAt which uniquely identifies the object.
my $f = <42.1e0>;
say $f.WHICH; # OUTPUT: Ā«NumStr|Num|42.1|Str|42.1e0ā¤Ā»
Operators
infix cmp
multi infix:<cmp>(Allomorph:D $a, Allomorph:D $b)
Compare two Allomorph
objects. The comparison is done on the
Numeric value first and then on the Str value. If you want to
compare in a different order then you would coerce to a Numeric
or Str value first:
my $f = IntStr.new(42, "smaller");
my $g = IntStr.new(43, "larger");
say $f cmp $g; # OUTPUT: Ā«Lessā¤Ā»
say $f.Str cmp $g.Str; # OUTPUT: Ā«Moreā¤Ā»
infix eqv
multi infix:<eqv>(Allomorph:D $a, Allomorph:D $b --> Bool:D)
Returns True
if the two Allomorph
$a
and $b
are of the same
type, their Numeric values are equivalent and their
Str values are also equivalent. Returns False
otherwise.