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