我看到了以下代码:

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

这返回一个峰值[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>

看来解析器不确定在哪里放置匿名功能的开始。因此,我的新问题是“如何帮助解析器限制匿名函数的边界?”

有帮助吗?

解决方案

不确定我理解这个问题,但是 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