is Str
Allomorph
类是 Raku 双重值类型的公共父类:ComplexStr
、IntStr
、NumStr
、RatStr
。
双重值类型(通常称为 同形异位词)允许将值表示为字符串和数字类型。通常,当上下文为“字符串”时,它们将为您创建,但可以确定它们是数字,例如在一些 引用构造 中
my = <42+0i>; say .^name; # OUTPUT: «ComplexStr»my = <42>; say .^name; # OUTPUT: «IntStr»my = <42.1e0>; say .^name; # OUTPUT: «NumStr»my = <42.1>; say .^name; # OUTPUT: «RatStr»
作为 Numeric
类和 Str
的子类,通过 Allomorph
类,同形异位词将被接受在预期任何一个的地方。但是,同形异位词不与其 Numeric
父类或 Str
专用变体共享对象标识
my (, , , )= < 42+0i 42 42e10 42.1 >;my (Complex , Int , Num , Rat )= , , , ; # OK!my Str= , , , ; # OK!# ∈ operator cares about object identitysay 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»
有关如何使用这些同形异位词的更完整描述,请参见 数字页面。
方法§
方法 ACCEPTS§
multi method ACCEPTS(Allomorph: Any \a)
如果 a
参数是 Numeric
(包括另一个 同形异位词),则检查调用者的 Numeric
值是否 ACCEPTS a
。如果 a
参数是 Str
,则检查调用者的 Str
值是否 ACCEPTS a
。如果 a
参数是其他任何内容,则检查调用者的 Numeric
和 Str
值是否 ACCEPTS
a
。
say "5.0" ~~ <5>; # OUTPUT: «False»say 5.0 ~~ <5>; # OUTPUT: «True»say <5.0> ~~ <5>; # OUTPUT: «True»
方法 Bool§
multi method Bool(::?CLASS:)
如果调用者在数字上为 0
,则返回 False
,否则返回 True
。不考虑调用者的 Str
值。
注意:对于 Allomorph
子类 RatStr
,另请参见 Rational.Bool
。
方法 chomp§
method chomp(Allomorph:)
方法 chop§
method chop(Allomorph: |c)
方法 comb§
method comb(Allomorph: |c)
方法 fc§
method fc(Allomorph:)
方法 flip§
method flip(Allomorph:)
方法 lc§
method lc(Allomorph:)
方法 pred§
method pred(Allomorph:)
在调用者的数字值上调用 Numeric.pred
。
方法 raku§
multi method raku(Allomorph:)
返回一个对象的表示,该表示可以通过 EVAL
来重建该对象的价值。
方法 samecase§
method samecase(Allomorph: |c)
在调用者的 Str.samecase
值上调用 Str
。
方法 samemark§
method samemark(Allomorph: |c)
在调用者的 Str.samemark
值上调用 Str
。
方法 split§
method split(Allomorph: |c)
方法 Str§
method Str(Allomorph:)
返回调用者的 Str
值。
方法 subst§
method subst(Allomorph: |c)
方法 subst-mutate§
method subst-mutate(Allomorph \SELF: |c)
在调用者的 Str.subst-mutate
值上调用 Str
。
方法 substr§
method substr(Allomorph: |c)
在调用者的 Str.substr
值上调用 Str
。
方法 substr-rw§
method substr-rw(Allomorph \SELF: = 0, = Whatever)
在调用者的 Str.substr-rw
值上调用 Str
。
方法 succ§
method succ(Allomorph:)
调用调用者的数字值上的 Numeric.succ
。
方法 tc§
method tc(Allomorph:)
方法 tclc§
method tclc(Allomorph:)
方法 trim§
method trim(Allomorph:)
方法 trim-leading§
method trim-leading(Allomorph:)
调用调用者的 Str
值上的 Str.trim-leading
。
方法 trim-trailing§
method trim-trailing(Allomorph:)
调用调用者的 Str
值上的 Str.trim-trailing
。
方法 uc§
method uc(Allomorph:)
方法 WHICH§
multi method WHICH(Allomorph:)
返回一个 ValueObjAt
类型的对象,该对象唯一标识该对象。
my = <42.1e0>;say .WHICH; # OUTPUT: «NumStr|Num|42.1|Str|42.1e0»
运算符§
中缀 cmp§
multi infix:<cmp>(Allomorph , Allomorph )
比较两个 Allomorph
对象。比较首先在 Numeric
值上进行,然后在 Str
值上进行。如果您想以不同的顺序进行比较,那么您会首先强制转换为 Numeric
或 Str
值
my = IntStr.new(42, "smaller");my = IntStr.new(43, "larger");say cmp ; # OUTPUT: «Less»say .Str cmp .Str; # OUTPUT: «More»
中缀 eqv§
multi infix:<eqv>(Allomorph , Allomorph --> Bool)
如果两个 Allomorph
$a
和 $b
是同一种类型,它们的 Numeric
值是 等价的,并且它们的 Str
值也是 等价的,则返回 True
。否则返回 False
。