首页 > 解决方案 > 在接收器上下文中无用地使用 LOOP_BLOCK_1 符号

问题描述

有一个像

perl6 -e 'loop { FIRST say "foo"; last }'

我明白了

WARNINGS for -e:
Useless use of LOOP_BLOCK_1 symbol in sink context (line 1)
foo

我知道如何解决警告。我想知道警告的来源是什么。我找到了这张开票,但似乎没有受到任何关注。

这个警告是关于什么的?

这没用怎么办?

版本

$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.

标签: raku

解决方案


这是一个错误,一个虚假的警告。

我知道如何解决警告。

这是主要的。

我想知道警告的来源是什么。

这是来自编译器的虚假警告。

我找到了这张公开的票,但它似乎没有受到任何关注。

我认为它引起了一些关注。

提交错误的 bbkr 链接到另一个错误,他们在其中展示了他们的解决方法。(它不是添加do而是删除FIRST移相器并将关联的语句放在循环之外,就在它之前。)

如果您关注 bbkr 原始错误中的其他链接,您会看到另一个错误,说明需要清理一般的“不需要的”机制。我想可用的圆形训练集中在更大的鱼上,例如这种整体机制。

希望你能看到这只是一个奇怪的警告信息,在更大的计划中只是一个小麻烦。如果您在循环结构中使用 FIRST 移相器,它似乎会出现。它有你可能知道和 bbkr 展示的非常明显的工作。

这个警告是关于什么的?

许多语言允许您混合过程和功能范式。运行程序代码是因为它的副作用。其结果的功能代码。一些结构可以两者兼得。

但是,如果您使用通常用于使用其结果的构造,并且编译器知道这一点,但它也知道它已在其值将被忽略的上下文中使用,该怎么办?

Perls 将此称为“在接收器上下文中对 ... 的无用使用”,并且通常会警告编码人员。(“sink”是其他语言文化中通常称为“void”上下文的替代/传统术语。)

此错误消息是这些警告之一,尽管是虚假的。

这没用怎么办?

没有什么。

相关的编译器警告机制变得混乱。

消息的“在接收器上下文中无用的使用 ...”部分是通用的,希望是不言自明的。

但是它不可能说“LOOP_BLOCK_1 符号”之类的东西。那是内部的胡说八道。

这是一个警告消息错误。


推荐阅读