如何限制匿名函数的边界?
-
29-09-2019 - |
题
我看到了以下代码:
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)
不隶属于 StackOverflow