Как ограничить границы анонимной функции? - PullRequest
0 голосов
/ 12 октября 2010

Я видел следующий код:

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

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

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

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>

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

Ответы [ 4 ]

2 голосов
/ 12 октября 2010

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

2 голосов
/ 12 октября 2010

Не уверен, что я понимаю вопрос, но 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))
1 голос
/ 12 октября 2010

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

Неправильно:

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

Справа:

Map(1 -> "one")

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

0 голосов
/ 12 октября 2010

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

...