在接收器上下文中无用的使用LOOP_BLOCK_1符号

时间:2018-09-07 18:06:08

标签: perl6

带有类似

的代码段
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.

1 个答案:

答案 0 :(得分:5)

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

  

我知道如何解决警告。

那是主要的事情。

  

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

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

  

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

我认为它引起了人们的注意。

提交该错误的

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

如果您遵循bbkr原始错误中的其他链接,您将看到另一个错误,解释了一般的“有害”机制需要清除。我想象可用的round tuits专注于更大的鱼类,例如这种总体机制。

希望您能看到,这只是一个奇怪的警告信息,对于更大的事情来说只是一个小小的麻烦。如果在循环结构中使用FIRST移相器,它似乎会出现。您大概知道并且bbkr展示了它周围非常明显的工作。

  

这是什么警告?

许多语言允许您混合过程和功能范例。运行过程代码是有副作用的。其结果的功能代码。某些构造可以同时做到。

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

Perls称其为“在接收器上下文中对...的无用使用”,通常会向编码器发出警告。 (“水槽”是其他语言文化中通常称为“无效”上下文的替代/传统术语。)

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

  

那这没用吗?

没事。

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

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

但是绝对不能说“ LOOP_BLOCK_1符号”之类的话。那是内部的庞然大物。

这是一个警告消息错误。