Scala:不是合法的形式参数

Luc*_*cas 3 scala compiler-errors map

我有一个功能:

val ADD = (x: Double, y Double) => x+y
Run Code Online (Sandbox Code Playgroud)

我想将它放在一张地图中,以下似乎有效

val nameMap = Map(ADD -> "+")
Run Code Online (Sandbox Code Playgroud)

但这不是:

val diffMap = Map(
 ADD -> (x: AlgObj,y: AlgObj, xdif: AlgObj, ydif: AlgObj) =>
  new AlgObj(ADD, xdif, ydif))
Run Code Online (Sandbox Code Playgroud)

我尝试的各种其他事情也没有尝试过,总是带有这样的信息:"不是一个合法的形式参数",带有" - >"下的插入符号.有谁知道这个错误信息是什么意思?

Rac*_*lit 8

当我粘贴在您的第一行代码中而没有更正其中的错误时,我收到了相同的错误消息:

scala> val ADD = (x: Double, y Double) => x+y
<console>:1: error: not a legal formal parameter
       val ADD = (x: Double, y Double) => x+y
                               ^
Run Code Online (Sandbox Code Playgroud)

我继续尝试这个:

scala> val ADD = (x: Double, y: Double) => x+y
ADD: (Double, Double) => Double = <function>

scala> val diffMap = Map(ADD -> (x: String, y: String) => x + y)
<console>:1: error: not a legal formal parameter
       val diffMap = Map(ADD -> (x: String, y: String) => x + y)
                             ^
Run Code Online (Sandbox Code Playgroud)

所以它看起来像这样的错误表示无效函数参数,解析器正试图组Map(ADD -> (x: String, y: String) => x + y)类似Map((ADD -> (x: String, y: String)) => x + y).

所以你需要在函数周围加上括号或括号:

scala> val diffMap = Map(ADD -> ((x: String, y: String) => x + y))
diffMap: scala.collection.immutable.Map[(Double, Double) => Double,(String, String) => java.lang.String] = Map(<function> -> <function>)
Run Code Online (Sandbox Code Playgroud)