Это кажется не логичным для меня:Карта переменную типа пара - невозможно
scala> val a = Map((1, "111"), (2, "222"))
a: scala.collection.immutable.Map[Int,String] = Map(1 -> 111, 2 -> 222)
scala> val b = a.map((key, value) => value)
<console>:8: error: wrong number of parameters; expected = 1
val b = a.map((key, value) => value)
^
scala> val c = a.map(x => x._2)
c: scala.collection.immutable.Iterable[String] = List(111, 222)
Я знаю, что я могу сказать val d = a.map({ case(key, value) => value })
Но почему нельзя сказать a.map((key, value) => value)
? Существует только один аргумент типа Tuple2[Int, String]
или Pair of Int, String
. В чем разница между a.map((key, value) => value)
и a.map(x => x._2)
?
UPDATE:
val myTuple2 = (1, 2)
- это одна переменная, правильно?
for ((k, v) <- a) yield v
- (k, v)
также является только одной переменной, правильно?
map((key, value) => value)
- 2 переменных. странно.
Как я могу указать переменную типа Tuple2
(или любого другого типа) в map
без использования case
?
UPDATE2:
Что случилось с этим?
Map((1, "111"), (2, "222")).map(((x,y):Tuple2[Int, String]) => y)
- неправильные
Map((1, "111"), (2, "222")).map(((x):Tuple2[Int, String]) => x._2)
- OK
Существует только одна переменная типа 'Tuple2 [Int, String]'. map имеет подпись 'def map [B] (f: (A) ⇒ B): Map [B]' - он принимает функцию, которая принимает ** одну ** переменную типа A и производит ** одну ** выходную переменную тип B (и 'x => x._2' является примером такой функции, тогда как' (ключ, значение) => значение' не является) –
@ om-nom-nom, '(key, value)' - является одной переменной типа Tuple2. –
, если это верно. «Список (1,2,3,4) .reduce ((x, y) => x + y)» невозможен –