Raku - 调用匿名正则表达式的字符串

4
为什么第一个表达式可以解释,而第二个却不行? 我理解它们是相同的,也就是说,一个字符串在调用匿名正则表达式。
("foo").first: /foo/ andthen say "$_ bar";
> foo bar

"foo": /foo/ andthen say "$_ bar";
> Confused
> at /home/dmc7z/raku/foo.raku:2
> ------> "foo":⏏ /foo/ andthen say "$_ bar";
>     expecting any of:
>         colon pair

我猜测,但从“List”下的first例程的文档中看来,它似乎是一个函数,它接受一个列表和一个反射,并返回第一个匹配项,即它是一个具有匹配概念的函数,有效地接受两个参数。你的第二个示例(失败的那个)没有应用匹配的函数或运算符。也许你想要使用~~或类似的东西(虽然这不会做同样的事情,即将结果修剪到第一个匹配项)。 - Dan Bron
Raku 的 first 命令似乎与 Raku 的 grep 命令非常相似。您是否在语法上看到类似的问题或问题? - jubilatious1
1
@jubilatious1j .first(...) 相当于 .grep(...).head - Brad Gilbert
1个回答

6
这是一种方法调用:
 ("foo").first: /foo/

这与您编写的代码相同:

("foo").first( /foo/ )

或者仅仅是这样:
"foo".first( /foo/ )

(注意,在上面的三个英文描述中,我在结尾处使用了。使用表示其后的内容是表达式的一部分的想法就是从那里来的。)
在这种情况下,使用first并没有太多意义。相反,我会使用~~
"foo" ~~ /foo/ andthen say "$_ bar";

first 用于在列表中查找第一个匹配某描述的项。如果你在单个项上使用它,它将返回该项或返回 Nil。它始终只返回一个值,在这种情况下 Nil 是最合理的单个未定义值。


之所以说它期望一个冒号对,是因为这是该位置唯一有效的 : 使用方式。说实话,我有点预计它会抱怨它是无效的标签。


2
谢谢。你澄清这只是一个方法调用的说明正是我所需要的。 - dmc7z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接