【发布时间】:2016-01-18 03:21:30
【问题描述】:
我发现了几个关于 Scala 编译器警告的问题:
后缀运算符 xxx 应该通过设置隐式值来启用 scala.language.postfixOps 可见。这可以通过添加 导入子句“import scala.language.postfixOps”或通过设置 编译器选项 -language:postfixOps。请参阅 Scala 文档以获取价值 scala.language.postfixOps 讨论为什么该功能应该是 明确启用。
以下是显示此警告的示例:
val m1 = List(1->"a",2->"b") toMap
当我第一次遇到这个问题时,没有人真正回答我想知道的问题:如何在不涉及导入或编译器选项的情况下解决这个问题。我的第一个想法是:如果它不喜欢后缀操作,那么通过用点替换空格来使方法/操作调用 explicit。例如:
val m1 = List(1->"a",2->"b").toMap
不幸的是,当我第一次尝试修复时,我当时正在处理的代码看起来像这样:
val m2 = List(1->"a",2->"b") map {case (k,v) => (k.toString,v)} toMap
当我添加点时,这导致了另一个晦涩的编译器错误:
val m2 = List(1->"a",2->"b") map {case (k,v) => (k.toString,v)}.toMap
扩展函数的参数类型缺失 匿名函数必须是完全已知的。 (SLS 8.5) 预期类型为:?
这与 k 和 v 标识符有关。
那时,我只是放弃并添加了 import 语句,一切都很好。但是,最近有一个学生问我这个问题,我想我最好回去调查一下。看看我对这个问题的回答,现在我想起来了,这是相当明显的。然而,我希望为其他一些人节省时间,让他们可以花时间完成所有其他关于该主题的讨论。
【问题讨论】:
标签: scala