0

以下のコードを見ました:

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

4 に答える 4

2

質問を理解しているかどうかわかりませんが、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))
于 2010-10-12T10:26:37.187 に答える
2

ダニエルによる答え、Anonymous functions and Maps in Scalaを見つけました。この答えにより、この場合、パーサーがプレースホルダーをどのように処理するかが明確になりました。全てに感謝。

于 2010-10-12T15:37:11.383 に答える
1

コレクションをそれ自体にマップする正しい方法は、マップを呼び出さないことです!

違う:

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

右:

Map(1 -> "one")

浅いコピー操作としても役に立ちません。デフォルトの Scala Map は不変であり、コピーしても意味がありません。

于 2010-10-12T10:34:00.177 に答える
0

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

于 2010-10-12T10:07:54.983 に答える