Scala 缺少扩展函数的参数类型
我是Scala的新手,我对《Scala在行动中》一书中的一个例子感到困惑 我正在使用IntelliJ,但我也尝试将其作为脚本(REPL)使用。scala编译器给了我与IntelliJ相同的错误。(正如书中所说,我正在使用Scala 2.10) 这是我的密码:Scala 缺少扩展函数的参数类型,scala,intellij-idea,Scala,Intellij Idea,我是Scala的新手,我对《Scala在行动中》一书中的一个例子感到困惑 我正在使用IntelliJ,但我也尝试将其作为脚本(REPL)使用。scala编译器给了我与IntelliJ相同的错误。(正如书中所说,我正在使用Scala 2.10) 这是我的密码: def parseArgs(args: Array[String]): Map[String, List[String]] = { val command = args.head val params = parseArgs(args)
def parseArgs(args: Array[String]): Map[String, List[String]] = {
val command = args.head
val params = parseArgs(args)
val url = args.last
def nameValuePair(paramName: String) = {
def values(commaSeparatedValues: String) = commaSeparatedValues.split(",").toList
// x => x + 2
val index = args.indexOf(_ == paramName)
(paramName, if(index == -1) Nil else values(args(index + 1)))
}
Map(nameValuePair("-d"), nameValuePair("-h"))
}
我得到的信息是:
C:\scala\projects\scripts\restclientscript.scala:12: error: missing parameter type for expanded function ((x$1) => x$1.$eq$eq(paramName))
val index = args.indexOf(_ == paramName)
^
one error found
这正是书中显示的,但我不知道如何使它工作
另外,indexOf方法实际上在书中找到了。但是编译器告诉我(和doc:)该方法不存在
最后,IntelliJ将不接受indexOf()方法中的==(突出显示为红色,但编译)
任何帮助都将不胜感激!:)
Array.indexOf
获取一个实例,该实例的索引应该在数组中找到
如果您想要一个带有谓词的版本,那么有一个Array.indexWhere
(至少根据Scala 2.11文档),它采用谓词函数p:(T)=>布尔值
因此,您可以:
args.indexOf(paramName)
或
这本书可能是指Scala的旧版本。查看您链接的文档页面,很明显indexOf方法具有以下签名:
indexOf(elem: T): Int
这意味着该方法不需要闭包,而是一个值。您可能希望使用indexWhere:
indexWhere(p: (T) ⇒ Boolean): Int
那应该行
还有一个建议是:永远不要相信IntelliJ Idea错误,始终使用sbt对它们进行双重检查,因为Idea使用不同的算法来检查错误,并且不依赖于实际的编译器。谢谢!我会给你一个+1,但我需要15的声誉,所以。。。当我这样做时,它起作用了:val index=args.indexWhere(==paramName)
,IntelliJ现在也接受了它。可能是因为我使用了Java8SDK吗?不,我不认为Java版本很重要,它必须是scala本身的版本。多亏了Patrykval index=args.indexWhere(==paramName)
!也会给你+1,但我需要15的声誉。非常抱歉:)@thomas77没问题,很高兴我能帮忙;)
indexWhere(p: (T) ⇒ Boolean): Int