在 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 Junction
s,你可以用例如折叠起来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
(在第二个解决方案中)。
这就是我正在尝试做的事情。它应该很简单,但我不知道如何正确地做。
> 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 Junction
s,你可以用例如折叠起来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
(在第二个解决方案中)。