Scala: недопустимый формальный параметр

#scala #map #compiler-errors

#scala #словарь #ошибки компилятора

Вопрос:

У меня есть функция:

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

и я хочу поместить это в map, кажется, работает следующее

 val nameMap = Map(ADD -> " ")
  

но это не:

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

как и различные другие вещи, которые я пробовал, всегда с сообщением: «недопустимый формальный параметр» с кареткой под ‘->’. Кто-нибудь знает, что означает это сообщение об ошибке?

Ответ №1:

Я получил то же сообщение об ошибке, когда вставил вашу первую строку кода, не исправив в ней ошибку:

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