【问题标题】:Making a junction out of an array with string values in Perl 6在 Perl 6 中用字符串值创建一个数组
【发布时间】:2017-10-25 08:45:58
【问题描述】:

这就是我想要做的。应该很简单,但是不知道怎么正确操作。

> my @search_keys = <bb cc dd>
[bb cc dd]
> my $search_junc = @search_keys.join('|')
bb|cc|dd
> "bb" eq $search_junc
False

【问题讨论】:

  • 没有理由期望一个字符串表现得好像它是等效的 Perl 代码。

标签: raku


【解决方案1】:
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() 函数的糖。就像&amp;all() 函数的语法糖一样。他们都返回Junctions,你可以用例如折叠。 so 函数。当然,如果你要在条件中使用它,你不需要自己折叠它,条件的Boolification 会为你做到这一点:

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

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

编辑(2 年多后):

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2020-05-26
    相关资源
    最近更新 更多