在sink上下文中无用的使用LOOP_BLOCK_1符号

问题描述 投票:4回答:1

用一个代码片段

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

我明白了

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

我知道如何解决警告。我想知道警告的来源是什么。我找到了this open ticket,但它似乎没有受到任何关注。

这个警告是关于什么的?

那怎么回事呢?

Version

$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.
perl6
1个回答
5
投票

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

我知道如何解决警告。

这是主要的事情。

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

这是编译器的一个虚假警告。

我发现这张门票,但似乎没有得到任何关注。

我认为它受到了一些关注。

提交错误的bbkr与另一个显示其解决方法的错误相关联。 (它不是添加do而是删除FIRST移相器并将相关语句放在循环之外。)

如果你按照bbkr原始bug中的其他链接,你会得到另一个错误,解释一般的“不需要的”机制需要清理。我想可用的round tuits专注于更大的鱼类,例如这种整体机制。

希望你能看到它只是一个奇怪的警告信息,并在更大的方案中产生轻微的滋扰。如果在循环结构中使用FIRST相位器,似乎会出现。这是非常明显的工作,你可能知道和bbkr显示。

这个警告是关于什么的?

许多语言允许您混合使用过程和功能范例。程序代码运行其副作用。结果的功能代码。一些构造可以做到这两点。

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

Perls将此称为“在汇集环境中无用的使用......”并且通常会警告编码人员。 (“sink”是其他语言文化中通常称为“无效”语境的替代/传统术语。)

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

那怎么回事呢?

没有。

相关的编译器警告机制已经混淆了。

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

但是它不应该像“LOOP_BLOCK_1符号”这样说。这是内部的笨蛋。

这是一个警告信息错误。

© www.soinside.com 2019 - 2024. All rights reserved.