Scala: недопустимый формальный параметр - PullRequest
3 голосов
/ 25 апреля 2011

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

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 Ответ

8 голосов
/ 25 апреля 2011

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

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>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...