Scala карта с postfixOps - PullRequest
       0

Scala карта с postfixOps

3 голосов
/ 15 марта 2020

Может кто-нибудь объяснить, почему nums.map (+2) не работает, но работает nums.map (2+)?

scala> val nums=List(1,2,3,4)
nums: List[Int] = List(1, 2, 3, 4)

scala>  nums.map(2+)
res3: List[Int] = List(3, 4, 5, 6)

scala> nums.map(+2)
<console>:27: error: type mismatch;
 found   : Int(2)
 required: Int => ?
       nums.map(+2)
                ^

1 Ответ

6 голосов
/ 15 марта 2020

Посмотрите на подпись для map():

final def map[B](f: (A) => B): List[B]

Аргумент f является функцией от A до B. 2+ удовлетворяет этому требованию функции, потому что это сокращение c syntacti для 2.+(_). Другими словами, метод +(), вызываемый для экземпляра класса Int, превращается в правильную функцию посредством eta extension .

Если вы хотите, чтобы + до 2 тогда вы можете .map(_+2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...