【问题标题】:Scala language keywords unlockable by an import? Why? Are they deprecated, discouraged?Scala语言关键字可通过导入解锁?为什么?他们是否被弃用,气馁?
【发布时间】:2021-06-11 05:02:20
【问题描述】:

阅读课本,我正在测试这个简单的scala 2.12 代码:

var b:ArrayBuffer[Int] = new ArrayBuffer();
b.append(5);
b += (8, 3, 2);

for(i <- 0 to 3 reverse)
  println(b(i));

但我收到了错误消息:

import clause 'import scala.language.postfixOps'
or by setting the compiler option -language:postfixOps.
See the Scaladoc for value scala.language.postfixOps for a discussion
why the feature should be explicitly enabled.

当然,我当时做了想要的导入,并且成功了:

import scala.language.postfixOps

2
3
8
5

但是通过导入解锁的语言关键字的概念是什么?

隐含地,我检查了for 关键字在Scala 中是否立即可用,
我假设while 和大多数其他人也是,

但如果reverse 和其他一些不存在,则意味着有一个列表...
禁用关键字 (???)
但我不知道那个列表,也不知道为什么它们是必须明确激活的。

  • 不鼓励使用它们吗?
  • 它们是否已弃用?
  • 或者处于“早期预览”状态,打算在Scala 2.13 或更高版本中真正实现,并且被认为是不稳定的?

【问题讨论】:

  • 您是否按照错误消息的提示进行操作并阅读了文档?你找到了什么?您能否解释一下,准确地,您对文档了解和不了解,您对不了解的部分做了哪些研究,在研究过程中发现了什么,以及为什么没有?帮不上你?这样,你 a) 防止回答者浪费他们的时间和你的重复你已经知道的东西,b) 防止回答者浪费他们和你的时间重复你已经研究过但不理解的东西,以及 c) 帮助 Scala 开发人员改进文档,以便
  • ……未来的开发者不会遇到与您相同的障碍。你基本上会让世界变得更美好,谁不想要呢?另外,你能澄清你的问题吗?您在标题和正文中多次提到关键字,但我在您的问题或解决方案中看不到任何与关键字相关的内容。
  • @JörgWMittag 嘿,请冷静。不要把事情看得太个人化。 Scala 不是一种如此封闭的语言,因此在 SO 中不允许对它提出任何问题以简化其理解。此外,Michal 在下面给出的解释是,它的一部分内容已被弃用。
  • 如果您同意 Michal 的回答,那么您应该接受它。

标签: scala


【解决方案1】:

这与关键字无关。 import scala.language.postfixOps 解锁了一种称为“后缀表示法”或“后缀运算符”的语言功能。这使您可以在“调用目标”和方法名称之间使用空格而不是点 (.) 调用无参数方法。所以不要写:

(0 to 3).reverse // "reverse" is just a method

您可以执行以下操作:

import scala.language.postfixOps
0 to 3 reverse

正如您所建议的那样,该功能已被弃用并且不鼓励使用,因为它会导致歧义。有关详细信息,请参阅 documentationthis answer

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多