用一个代码片段
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,但它似乎没有受到任何关注。
这个警告是关于什么的?
那怎么回事呢?
$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.
这是一个错误,一个虚假的警告。
我知道如何解决警告。
这是主要的事情。
我想知道警告的来源是什么。
这是编译器的一个虚假警告。
我发现这张门票,但似乎没有得到任何关注。
我认为它受到了一些关注。
提交错误的bbkr与另一个显示其解决方法的错误相关联。 (它不是添加do
而是删除FIRST
移相器并将相关语句放在循环之外。)
如果你按照bbkr原始bug中的其他链接,你会得到另一个错误,解释一般的“不需要的”机制需要清理。我想可用的round tuits专注于更大的鱼类,例如这种整体机制。
希望你能看到它只是一个奇怪的警告信息,并在更大的方案中产生轻微的滋扰。如果在循环结构中使用FIRST相位器,似乎会出现。这是非常明显的工作,你可能知道和bbkr显示。
这个警告是关于什么的?
许多语言允许您混合使用过程和功能范例。程序代码运行其副作用。结果的功能代码。一些构造可以做到这两点。
但是,如果你使用通常与其结果的意图一起使用的构造,并且编译器知道这一点,但它也知道它已被用于其值将被忽略的上下文中,该怎么办?
Perls将此称为“在汇集环境中无用的使用......”并且通常会警告编码人员。 (“sink”是其他语言文化中通常称为“无效”语境的替代/传统术语。)
此错误消息是这些警告之一,尽管是一个虚假的警告。
那怎么回事呢?
没有。
相关的编译器警告机制已经混淆了。
消息中“无用的使用...在接收器上下文中”部分是通用的,并且希望是不言自明的。
但是它不应该像“LOOP_BLOCK_1符号”这样说。这是内部的笨蛋。
这是一个警告信息错误。