class Allomorph isStr { }
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! myStr@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§
multimethodACCEPTS(Allomorph:D: Any:D \a)
If the a
parameter is Numeric
(including another allomorph), checks if invocant's Numeric
value ACCEPTSa
. If the a
parameter is Str
, checks if invocant's Str
value ACCEPTSa
. 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§
multimethodBool(::?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§
methodchomp(Allomorph:D:)
Calls Str.chomp
on the invocant's Str
value.
method chop§
methodchop(Allomorph:D: |c)
Calls Str.chop
on the invocant's Str
value.
method comb§
methodcomb(Allomorph:D: |c)
Calls Str.comb
on the invocant's Str
value.
method fc§
methodfc(Allomorph:D:)
Calls Str.fc
on the invocant's Str
value.
method flip§
methodflip(Allomorph:D:)
Calls Str.flip
on the invocant's Str
value.
method lc§
methodlc(Allomorph:D:)
Calls Str.lc
on the invocant's Str
value.
method pred§
methodpred(Allomorph:D:)
Calls Numeric.pred
on the invocant's numeric value.
method raku§
multimethodraku(Allomorph:D:)
Return a representation of the object that can be used via EVAL
to reconstruct the value of the object.
method samecase§
methodsamecase(Allomorph:D: |c)
Calls Str.samecase
on the invocant's Str
value.
method samemark§
methodsamemark(Allomorph:D: |c)
Calls Str.samemark
on the invocant's Str
value.
method split§
methodsplit(Allomorph:D: |c)
Calls Str.split
on the invocant's Str
value.
method Str§
methodStr(Allomorph:D:)
Returns the Str
value of the invocant.
method subst§
methodsubst(Allomorph:D: |c)
Calls Str.subst
on the invocant's Str
value.
method subst-mutate§
methodsubst-mutate(Allomorph:D \SELF: |c)
Calls Str.subst-mutate
on the invocant's Str
value.
method substr§
methodsubstr(Allomorph:D: |c)
Calls Str.substr
on the invocant's Str
value.
method substr-rw§
methodsubstr-rw(Allomorph:D \SELF: $start= 0,$want=Whatever)
Calls Str.substr-rw
on the invocant's Str
value.
method succ§
methodsucc(Allomorph:D:)
Calls Numeric.succ
on the invocant's numeric value.
method tc§
methodtc(Allomorph:D:)
Calls Str.tc
on the invocant's Str
value.
method tclc§
methodtclc(Allomorph:D:)
Calls Str.tclc
on the invocant's Str
value.
method trim§
methodtrim(Allomorph:D:)
Calls Str.trim
on the invocant's Str
value.
method trim-leading§
methodtrim-leading(Allomorph:D:)
Calls Str.trim-leading
on the invocant's Str
value.
method trim-trailing§
methodtrim-trailing(Allomorph:D:)
Calls Str.trim-trailing
on the invocant's Str
value.
method uc§
methoduc(Allomorph:D:)
Calls Str.uc
on the invocant's Str
value.
method WHICH§
multimethodWHICH(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$fcmp$g; # OUTPUT: «Less» say$f.Strcmp$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.
Typegraph§
Allomorph