为什么这个 Perl 6 feed 操作符是一个“虚假语句”?

2023-11-21

我把这个例子取自第 10 天 – Perl 6 2010 降临节日历的 Feed 操作员随着轻微的变化.uc为了.ucfirst不再存在了:

my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
    ==> grep { /at/ } ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;

我的写法略有不同,添加了一些额外的空格:

my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
    ==> grep { /at/ }
    ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;

现在这是一个“虚假声明”:

===SORRY!=== Error while compiling ...
Bogus statement
------>         ==> grep { /at/ }⏏<EOL>
expecting any of:
    postfix
    prefix
    statement end
    term

仅此示例就不是问题。当前文档中的一些示例可以表现出相同的行为。

如果我添加一个unspace到有问题的行的末尾,它再次起作用:

my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
    ==> grep { /at/ } \
    ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;

奇怪的是,该行末尾的注释不起作用。我本以为它会吃掉令人讨厌的空白。

The 饲料操作员 says:

对于采用单个参数或第一个参数是块的例程/方法,通常需要使用括号进行调用

这样可行:

my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
    ==> grep( { /at/ } )
    ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;

但为什么这在第一种形式中不是问题呢?这里的空白是做什么的?而“经常需要”又包括哪些情况呢?


来自 Perl 6 文档分离语句:

右大括号后跟换行符意味着语句分隔符

换句话说,每当块的右大括号是一行中的最后一个内容(不包括空格和注释),那么解析器会在其后面隐式插入一个分号。

这使我们可以编写如下内容,并且在后面不加分号}:

my @foo = @bar.map: {
    ...
}

分号在那里会很难看,如果你首先将循环写为for @bar { ... }然后决定把它变成map对于这样的赋值,添加尾随分号会很烦人并且很容易忘记。因此,在大多数情况下,行尾块后的这种自动语句终止是有帮助的。

然而,饲料操作员向区块中喂食是导致人们绊倒的一种情况(可能是唯一一种)。

为了防止这种情况发生,请插入\(又名unspace) 在块之后,正如您已经注意到的。 unspace 使得包含换行符的空白对解析器不可见,因此前面提到的基于换行符的解析器规则将不会被应用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 Perl 6 feed 操作符是一个“虚假语句”? 的相关文章

随机推荐

  • 购物车,可以使用Devise的会话功能吗?

    我正在编写一个电子商务网站 我需要实现购物车功能 我希望客户能够在不事先注册的情况下将产品添加到购物车 所以我想我可以通过会话来实现这一点 这可以在 Devise gem 中完成吗 还是我必须实现我自己的会话模型才能使其工作 您需要处理自己
  • SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败

    declare a varchar 40 set a 1 23e 4 declare b decimal 27 12 if isnumeric a 1 begin select b cast a as decimal 27 12 end e
  • data.frame 中的唯一/排序

    我有一个像这样的数据框 x c 01 01 01 22 22 03 03 03 35 35 y c f f f m m m m m f f df data frame spn x sex y 似乎 spn sex 1 01 f 2 01 f
  • Java 中的两个数组声明有什么区别? [复制]

    这个问题在这里已经有答案了 在我的书中 他们一直在以下两种方法之间切换声明数组的方式 int array1 1 2 3 int array2 1 2 3 我想知道两个括号的位置有什么区别 为什么当我将括号放在名称后面 例如在数组 1 中 时
  • Android - 从代码中引用当前应用的主题中的属性值

    Android 开发指南explains如何使用问号 而不是 at 来引用当前应用的主题中的属性值 有谁知道如何从代码中做到这一点 例如在定制组件中 在 XML 中 它看起来像这样 style header background 以编程方式
  • Django 自定义左外连接

    我用这个查询了 Django 模型 news News objects filter Q likes user isnull True Q likes user user extra select is liked NewsLikes me
  • 使用 PHP 将 CSV 转换为 JSON?

    我需要转换一个CSV文件到JSON在服务器上使用 PHP 我正在使用这个有效的脚本 function csvToJSON csv rows explode n csv i 0 len count rows json n data forea
  • 有办法防止 cookie 被盗吗?

    在 Web 2 0 应用程序中 许多用户通常希望保持登录状态 记住我 标志 而另一方面 他们的 cookie 可以访问非常私密的数据 有没有办法防止有人直接从计算机或通过嗅探窃取 cookie 从而使用 cookie 来访问用户的数据 始终
  • “in”运算符或 obj.hasOwnProperty(prop) 的 Big O 表示法的效率是多少

    Mozilla的网站上清楚地描述了hasOwnProperty 和in操作员 但是 它没有提供有关其效率的任何实施细节 我怀疑他们会是O 1 恒定时间 但希望看到任何可能存在的参考或测试 将我的评论变成答案 hasOwnProperty s
  • 使用自己的应用程序打开自定义文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何将文件扩展名与 C 中的当前可执行文件关联 所以 我正在申请学校 最终项目 在这个应用程序中 我有一个Project 班级 这可以保存为自定义文件 例如测试 gpr gpr 是扩展名 如何让 Wi
  • 将静态参数传递给类

    据我所知 你不能将参数传递给 C 中的静态构造函数 但是 在创建类的实例之前 我确实需要传递两个参数并将它们分配给静态字段 我该怎么办 这可能是对 工厂方法的调用 class Foo private int bar private stat
  • Python场景变化检测

    我想知道是否有人有Python和视频处理的经验 本质上 我想知道是否有任何库可以让我在视频中进行场景检测 如果没有 是否有任何可以让我将视频分成一系列帧并让我处理像素 Thanks OpenCV有 Python 绑定 我不认为它有任何内置的
  • 如果我在 PHP 中执行 print_r ,它会以垃圾形式打印数组

    如何以树状格式打印数组 使其更易于阅读 Try pre pre 它将提供 HTML 的空白策略修剪掉的正确树结构
  • Rails 当前页面?当方法为 POST 时“失败”

    我有一个非常简单的问题 我有一页报告 每个报告都有自己的选项卡 我在用着current page 以确定应突出显示哪个选项卡 当我提交任何报告时 current page 似乎不再起作用 显然是因为请求方法是POST 这是预期的行为吗cur
  • 在 OSX Catalina 上安装用于 gem 安装的 Ruby 开发工具

    我知道这个问题有很多例子 我已经完成了这些答案中的所有内容 但 4 小时后却一无所获 我正在尝试在 Catalina 10 15 7 上安装 gem 并获得非常流行的 System Library Frameworks Ruby frame
  • 如何在 WPF 中删除鼠标悬停时按钮的发光

    我在 WPF 中使用一个简单的按钮 我已经在背景上放置了按钮的图像 我的问题是 当我将鼠标指针移动到按钮时 它会获得默认发光并覆盖作为背景给出的图像
  • Hive 中的增量/增量负载

    我有以下用例 我的应用程序有一个表多年数据 in RDBMSD B 我们已经用过sqoop将数据获取到 HDFS 并加载到按以下分区的 hive 表中年 月 现在 应用程序每天都会更新并将新记录插入 RDBMS 表中 这些更新的记录可以跨越
  • powershell 2.0重定向文件处理异常

    我正在寻找解决方案The OS handle s position is not what FileStream expected Do not use a handle simultaneously in one FileStream a
  • 为什么 LINQ 中的 Union 函数不删除重复条目?

    我正在使用 VB NET 我知道 Union 通常按 ByRef 工作 但在 VB 中 字符串通常被视为原始数据类型 因此 问题就在这里 Sub Main Dim firstFile secondFile As String resulti
  • 为什么这个 Perl 6 feed 操作符是一个“虚假语句”?

    我把这个例子取自第 10 天 Perl 6 2010 降临节日历的 Feed 操作员随着轻微的变化 uc为了 ucfirst不再存在了 my rakudo people