在 Regex 中§

请参阅主要文档 在上下文中 了解方法 ACCEPTS

multi method ACCEPTS(Regex:D: Mu --> Match:D)
multi method ACCEPTS(Regex:D: @)
multi method ACCEPTS(Regex:D: %)

将正则表达式与传入的参数进行匹配。如果参数是 Positional,则返回任何列表项的第一个成功匹配项。如果参数是 Associative,则返回任何键的第一个成功匹配项。否则,它将参数解释为 Str 并与其进行匹配。

对于 Positional 和 Associative 匹配,如果失败,则返回 Nil

在 Map 中§

请参阅主要文档 在上下文中 了解方法 ACCEPTS

multi method ACCEPTS(Map:D: Positional $topic)
multi method ACCEPTS(Map:D: Cool:D     $topic)
multi method ACCEPTS(Map:D: Regex      $topic)
multi method ACCEPTS(Map:D: Any        $topic)

如果右侧是 Map,则在智能匹配中使用。

如果主题类似列表 (Positional),则如果列表中的任何元素作为 Map 中的键存在,则返回 True。

如果主题的类型是 Cool(字符串、整数等),则如果主题作为键存在,则返回 True。

如果主题是正则表达式,则如果任何键与正则表达式匹配,则返回 True。

作为后备,主题被强制转换为列表,并应用 Positional 行为。

在列表中§

请参阅主要文档 在上下文中 了解方法 ACCEPTS

multi method ACCEPTS(List:D: $topic)

如果 $topicIterable,则根据两个 Iterable 的内容是否匹配返回 TrueFalse。调用者中的 Whatever 元素与 $topic Iterable 相应位置的任何元素匹配。 HyperWhatever 匹配任意数量的任何元素,包括没有元素

say (123)       ~~ (1,  *3);  # OUTPUT: «True␤» 
say (123)       ~~ (9,  *5);  # OUTPUT: «False␤» 
say (123)       ~~ (   **3);  # OUTPUT: «True␤» 
say (123)       ~~ (   **5);  # OUTPUT: «False␤» 
say (13)          ~~ (1**3); # OUTPUT: «True␤» 
say (12453~~ (1**3); # OUTPUT: «True␤» 
say (12456~~ (1**5); # OUTPUT: «False␤» 
say (12456~~ (   **   ); # OUTPUT: «True␤» 
say ()              ~~ (   **   ); # OUTPUT: «True␤»

此外,如果调用者或 $topic 是惰性 Iterable,则返回 False,除非 $topic 与调用者是同一对象,在这种情况下返回 True

如果 $topic 不是 Iterable,则如果调用者没有元素或其第一个元素是 Match 对象(此行为支持 m:g// 智能匹配),则返回调用者,否则返回 False

在同形异义词中§

请参阅主要文档 在上下文中 了解方法 ACCEPTS

multi method ACCEPTS(Allomorph:D: Any:D \a)

如果 a 参数是 Numeric(包括另一个 同形异义词),则检查调用者的 Numeric 值是否 ACCEPTS a。如果 a 参数是 Str,则检查调用者的 Str 值是否 ACCEPTS a。如果 a 参数是其他任何内容,则检查调用者的 NumericStr 值是否 ACCEPTS a

say "5.0" ~~ <5># OUTPUT: «False␤» 
say 5.0   ~~ <5># OUTPUT: «True␤» 
say <5.0> ~~ <5># OUTPUT: «True␤»

在 Any 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

multi method ACCEPTS(Any:D: Mu $other)

用法

EXPR.ACCEPTS(EXPR);

如果 $other === self(即,它检查对象标识),则返回 True

许多内置类型会覆盖此项以进行更具体的比较。

在角色 Setty 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

method ACCEPTS($other)

如果 $otherself 包含所有相同的元素且没有其他元素,则返回 True

在角色 Baggy 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

method ACCEPTS($other --> Bool:D)

如果右侧是 Baggy,则在智能匹配中使用。

如果右侧是类型对象,即 Baggy,则如果 $other does Baggy,则该方法返回 True,否则返回 False

如果右侧是 Baggy 对象,则仅当 $other 具有与调用者相同的元素(权重相同)时,才返回 True

my $breakfast = bag <eggs bacon>;
say $breakfast ~~ Baggy;                            # OUTPUT: «True␤» 
say $breakfast.does(Baggy);                         # OUTPUT: «True␤» 
 
my $second-breakfast = (eggs => 1bacon => 1).Mix;
say $breakfast ~~ $second-breakfast;                # OUTPUT: «True␤» 
 
my $third-breakfast = (eggs => 1bacon => 2).Bag;
say $second-breakfast ~~ $third-breakfast;          # OUTPUT: «False␤»

在 Range 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

multi method ACCEPTS(Range:D: Mu \topic)
multi method ACCEPTS(Range:D: Range \topic)
multi method ACCEPTS(Range:D: Cool:D \got)
multi method ACCEPTS(Range:D: Complex:D \got)

指示 Range 是否包含(与)另一个 Range 重叠。例如

my $p = Range.new35  );
my $r = Range.new110 );
 
say $p.ACCEPTS$r );    # OUTPUT: «False␤» 
say $r.ACCEPTS$p );    # OUTPUT: «True␤» 
say $r ~~ $p;            # OUTPUT: «False␤»  (same as $p.ACCEPTS( $r ) 
say $p ~~ $r;            # OUTPUT: «True␤»   (same as $r.ACCEPTS( $p )

无限 Range 始终包含任何其他 Range,因此

say 1..10 ~~ -∞..∞;    # OUTPUT: «True␤» 
say 1..10 ~~ -∞^..^∞;  # OUTPUT: «True␤»

类似地,具有开放边界的 Range 通常包括其他范围

say 1..2 ~~ *..10;  # OUTPUT: «True␤» 
say 2..5 ~~ 1..*;   # OUTPUT: «True␤»

还可以使用非数字范围,例如基于字符串的范围

say 'a'..'j' ~~ 'b'..'c';  # OUTPUT: «False␤» 
say 'b'..'c' ~~ 'a'..'j';  # OUTPUT: «True␤» 
say 'raku' ~~ -∞^..^∞;     # OUTPUT: «True␤» 
say 'raku' ~~ -∞..∞;       # OUTPUT: «True␤» 
say 'raku' ~~ 1..*;        # OUTPUT: «True␤»

使用整数 RangeCool(字符串)进行智能匹配时,ACCEPTS 方法利用 beforeafter 运算符来检查 Cool 值是否与范围重叠

say 1..10 ~~ '5';  # OUTPUT: «False␤» 
say '5' before 1;  # OUTPUT: «False␤» 
say '5' after 10;  # OUTPUT: «True␤» 
say '5' ~~ *..10;  # OUTPUT: «False␤»

在上面的示例中,由于 '5' 字符串在 10 整数值之后,因此 Range 不与指定的值重叠。

Mu 实例(即,通用实例)匹配时,使用 cmp 运算符。

在角色 Numeric 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

multi method ACCEPTS(Numeric:D: $other)

如果 $other 可以强制转换为 Numeric 并且在数值上等于调用者(或两者都计算为 NaN),则返回 True

在 Whatever 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

multi method ACCEPTS(Whatever:D: Mu $other)
multi method ACCEPTS(Whatever:U: Mu $other)

如果调用者是 实例,则始终返回 True。如果调用者是类型对象,则执行类型检查。

say 42 ~~ (*);       # OUTPUT: «True␤» 
say 42 ~~ Whatever;  # OUTPUT: «False␤»

在 Mu 中§

有关方法 ACCEPTS,请参阅上下文的原始文档

multi method ACCEPTS(Mu:U: $other)

ACCEPTS 是使用 中缀 ~~ 运算符进行智能匹配的方法,并在右侧(匹配器)上调用 given/when。

Mu:U 多值执行类型检查。如果 $other 符合调用者(始终是类型对象或失败),则返回 True

say 42 ~~ Mu;           # OUTPUT: «True␤» 
say 42 ~~ Int;          # OUTPUT: «True␤» 
say 42 ~~ Str;          # OUTPUT: «False␤»

请注意,没有针对已定义调用者的多值;这是为了允许 连接 的自动线程化,当没有可用于分派的直接候选者时,这将作为后备机制发生。

在签名中§

有关 方法 ACCEPTS 的详细信息,请参见 上下文中的主要文档

multi method ACCEPTS(Signature:D: Signature $topic)
multi method ACCEPTS(Signature:D: Capture $topic)
multi method ACCEPTS(Signature:D: Mu \topic)

如果 $topicSignature,则如果 $topic 接受的任何内容也为调用者接受,则返回 True,否则返回 False

:($a$b~~ :($foo$bar$baz?);   # OUTPUT: «True» 
:(Int $n~~ :(Str);                 # OUTPUT: «False»

$topicCapture,如果它可以绑定到调用者,则返回 True,即,如果具有调用者 Signature 的函数可以使用 $topic 调用

\(12:foo~~ :($a$b:foo($bar)); # OUTPUT: «True» 
\(1:bar)    ~~ :($a);                 # OUTPUT: «False»

最后,带有 Mu \topic 的候选者将 topic 转换为 Capture,并遵循与 Capture $topic 相同的语义

<a b c d>  ~~ :(Int $a);      # OUTPUT: «False» 
42         ~~ :(Int);         # OUTPUT: «False» (Int.Capture throws) 
set(<a b>~~ :(:$a:$b);    # OUTPUT: «True»

由于 where 子句 不可内省,因此该方法无法确定两个签名 ACCEPTS 相同类型的 where 约束参数。此类比较将返回 False。这包括带有文字的签名,这些签名只是 where 约束的语法糖

say :(42~~ :($ where 42)    # OUTPUT: «False␤»

在 IO::Path 中§

有关 方法 ACCEPTS 的详细信息,请参见 上下文中的主要文档

multi method ACCEPTS(IO::Path:D: Cool:D $other --> Bool:D)

如果需要,将参数强制转换为 IO::Path。如果两个路径上的 .absolute 方法返回相同的字符串,则返回 True注意:如果两个路径以不同的方式构造并且从未完全解析,则表面上指向同一资源的两个路径可能不会智能匹配为 True

say "foo/../bar".IO ~~ "bar".IO # False

原因是上面两个路径在完全解析后可能指向不同的资源(例如,如果 foo 是符号链接)。在智能匹配之前解析路径以检查它们是否指向同一资源

say "foo/../bar".IO.resolve(:completely~~ "bar".IO.resolve(:completely# True

在枚举 Bool 中§

有关 方法 ACCEPTS 的详细信息,请参见 上下文中的主要文档

method ACCEPTS(Bool:D: --> Bool:D)

用于智能匹配比较。当右侧为 True 时,始终返回 True,当匹配的右侧为 False 时,始终返回 False。特别是,ACCEPTS 始终返回调用它的实例,即智能匹配的右侧。例如

my $b = Bool.newTrue );
# when True on the right side returns 
# always True 
True  ~~ $b;     # True 
False ~~ $b;     # True 
 
$b = Bool.newFalse );
# when False on the right side 
# returns always False 
False ~~ $b;     # False 
True ~~ $b;      # False 

在 Str 中§

有关 方法 ACCEPTS 的详细信息,请参见 上下文中的主要文档

multi method ACCEPTS(Str:D: $other)

如果字符串 $other 相同,则返回 True

在 Pair 中§

有关 方法 ACCEPTS 的详细信息,请参见 上下文中的主要文档

multi method ACCEPTS(Pair:D $: %topic)
multi method ACCEPTS(Pair:D $: Pair:D $topic)
multi method ACCEPTS(Pair:D $: Mu $topic)

如果 %topicAssociative,则使用调用者的键在其中查找值,并检查调用者的值 .ACCEPTS 该值

say %(:42a) ~~ :42a; # OUTPUT: «True␤» 
say %(:42a) ~~ :10a; # OUTPUT: «False␤»

如果 $topic 是另一个 Pair,检查调用者的键和值 .ACCEPTS 分别接受 $topic 的键和值

say :42~~ :42a; # OUTPUT: «True␤» 
say :42~~ :42a; # OUTPUT: «False␤» 
say :10~~ :42a; # OUTPUT: «False␤»

如果 $topic 是任何其他值,调用者 Pair 的键被视为方法名。此方法在 $topic 上被调用,其 Bool 结果与调用者 PairBool 值进行比较。例如,质数可以使用 smartmatch 进行测试

say 3 ~~ :is-prime;             # OUTPUT: «True␤» 
say 3 ~~  is-prime => 'truthy'# OUTPUT: «True␤» 
say 4 ~~ :is-prime;             # OUTPUT: «False␤»

此表单还可以用于检查同一对象(例如 IO::Path)上多个方法的 Bool 值,方法是使用 Junctions

say "foo" .IO ~~ :f & :rw# OUTPUT: «False␤» 
say "/tmp".IO ~~ :!f;      # OUTPUT: «True␤» 
say "."   .IO ~~ :f | :d;  # OUTPUT: «True␤»

在代码中§

查看主要文档 在上下文中 了解 方法 ACCEPTS

multi method ACCEPTS(Code:D: Mu $topic)

通常调用代码对象并将 $topic 作为参数传递。但是,当在不接受参数的代码对象上调用时,代码对象将被调用而不带参数,并且 $topic 被丢弃。返回调用的结果。