Вопрос

Я видел приведенный ниже код:

Map(1 -> "one", 2 -> "two") map _._1

Это возвращает итерационную [int], но если я не хочу ничего не делать с картой, как это сделать?

Я хочу сделать что -то вроде ниже, но приведенный ниже код не может составить, я знаю, потому что это экземпляр объекта не функция, а как создать функцию для выполнения x => x и используйте Placeholder:

Map(1 -> "one") map (_)  // map (Int, String) to (Int, String) by nothing change
// I test some other way, but all can't compile

Как это сделать?

Обновлено

Извините за запутанную страстного человека. Я хочу знать, почему map (_) != map (x => x), компилятор преобразует этот код в (x$1) => Map(1.$minus$greater("one")).map(x$1) Почему нет Map('a'.$minus$greater(1)).map((x$1) => x$1), и есть ли способ использовать способ использовать _ сделать этот код?

Я использовал ниже код, чтобы помочь компилятору сделать вывод _ тип:

Map(1 -> "one") map (_:((Int, String))=>(Int, String))
// but it return (((Int, String)) => (Int, String)) => scala.collection.immutable.Map[Int,String] = <function1>

Кажется, синтаксический анализатор не был уверен, куда поместить начало анонимной функции. Итак, мой новый вопрос: «Как помочь парсеру ограничить границу анонимной функции?»

Это было полезно?

Решение

Не уверен, что понимаю вопрос, но identity Может быть, то, что вы ищете:

scala> Map(1 -> "one") map (identity)
res66: scala.collection.mutable.Map[Int,java.lang.String] = Map((1,one))

Или сделайте несколько трюков:

scala> def __[A](x: A): A = x
__: [A](x: A)A

scala> Map(1 -> "one") map (__)
res1: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one))

Другие советы

Я нахожу ответ Даниэля, Анонимные функции и карты в Scala , этот ответ позволил мне прояснить, как проанализирует процесс процесса заполнителя в этом случае. Спасибо за все.

Я не вижу никакой ценности в том, что вы пытаетесь сделать здесь, правильный способ сопоставления коллекции для себя - не называть карту!

Неправильный:

Map(1 -> "one") map (_)

Верно:

Map(1 -> "one")

Это даже не полезно в качестве малой работы копии, карта Scala по умолчанию неизменна, и нет смысла копировать ее.


  Map(1 -> "one") map((x)=>x)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top