Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 缺少扩展函数的参数类型_Scala_Intellij Idea - Fatal编程技术网

Scala 缺少扩展函数的参数类型

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)

我是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)
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本身的版本。多亏了Patryk
val index=args.indexWhere(==paramName)
!也会给你+1,但我需要15的声誉。非常抱歉:)@thomas77没问题,很高兴我能帮忙;)
indexWhere(p: (T) ⇒ Boolean): Int