Scala:不是合法的形式参数

时间:2011-04-25 02:09:13

标签: scala map compiler-errors

我有一个功能:

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

我希望将其放在地图中,以下似乎可以正常工作

val nameMap = Map(ADD -> "+")

但这不是:

val diffMap = Map(
 ADD -> (x: AlgObj,y: AlgObj, xdif: AlgObj, ydif: AlgObj) =>
  new AlgObj(ADD, xdif, ydif))

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

1 个答案:

答案 0 :(得分: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
                               ^

我接着尝试了这个:

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)
                             ^

所以看起来这个错误表示函数参数无效,并且解析器正在尝试将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>)