在 Perl 6 中用字符串值从数组中创建一个联结点

Making a junction out of an array with string values in Perl 6

这就是我正在尝试做的事情。它应该很简单,但我不知道如何正确地做。

> my @search_keys = <bb cc dd>
[bb cc dd]
> my $search_junc = @search_keys.join('|')
bb|cc|dd
> "bb" eq $search_junc
False
my @search_keys = <bb cc dd>;
say "bb" eq any(@search_keys);     # any(True, False, False)
say so "bb" eq any(@search_keys);  # True

| 语法只是调用 any() 函数的糖分。就像 &all() 函数的语法糖一样。它们都是 return Junctions,你可以用例如折叠起来so 函数。当然,如果你打算在条件中使用它,你不需要自己折叠它,Bool条件的化会为你做:

say "found" if "bb" eq any(@search_keys);

另请参阅:https://docs.raku.org/type/Junction

编辑(2 年多后):

如果您对列表 (<bb cc dd>) 中给定对象 ("bb") 的简单等价性感兴趣,您也可以为此使用集合运算符:

say "found" if "bb" (elem) @search_keys;  # found

从技术上讲,这将对给定字符串的 .WHICH 进行比较。更重要的是,这个成语一找到匹配就会走捷径。因此,由于在您的示例中 "bb" 是数组中的第一个元素,因此它只会检查该元素。而且它不需要构建任何其他对象,例如 Junction(在第一个解决方案中)或 Set(在第二个解决方案中)。