Как ограничить границу анонимной функции?
-
29-09-2019 - |
Вопрос
Я видел приведенный ниже код:
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)