在Scala中返回其第一个参数的函数的简明实现
在Scala中,当我调用在Scala中返回其第一个参数的函数的简明实现,scala,Scala,在Scala中,当我调用“helloworld.groupBy(u.toLower)时,我得到了预期的结果: scala> "helloworld".groupBy(_.toLower) res10: scala.collection.immutable.Map[Char,String] = Map(e -> e, l -> lll, h -> h, r -> r, w -> w, o -> oo, d -> d) 但是,当我将groupBy设置
“helloworld.groupBy(u.toLower)
时,我得到了预期的结果:
scala> "helloworld".groupBy(_.toLower)
res10: scala.collection.immutable.Map[Char,String] = Map(e -> e, l -> lll, h -> h, r -> r, w -> w, o -> oo, d -> d)
但是,当我将groupBy设置为区分大小写时(即,“helloworld”.groupBy(41;
),我会得到以下错误:
scala> "helloworld".groupBy(_)
<console>:8: error: missing parameter type for expanded function ((x$1) => "helloworld".groupBy(x$1))
"helloworld".groupBy(_)
^
scala>“helloworld”.groupBy(\uux)
:8:错误:缺少扩展函数的参数类型((x$1)=>“helloworld”.groupBy(x$1))
“helloworld”。groupBy(41;
^
为什么第二个例子不起作用?编写“helloworld”.groupBy(x=>x)
给出了预期的结果,但这似乎是不必要的冗长。这是因为
"helloworld".groupBy(_)
实际上相当于
x => "helloworld".groupBy(x)
因此,通过使用前一种语法,您可以真正定义函数,而不是分组。要查看这一点,请检查
scala> "helloworld".groupBy(_)
<console>:8: error: missing parameter type for expanded function ((x$1) => "helloworld".groupBy(x$1))
"helloworld".groupBy(_)
scala>“helloworld”.groupBy(\uux)
:8:错误:缺少扩展函数的参数类型((x$1)=>“helloworld”.groupBy(x$1))
“helloworld”。groupBy(41;
除此之外,不用使用
x=>x
你可以一直使用identity
当我有机会使用identity
功能时,我总会感到一种兴奋。“当你看到它的时候……”:如果你参考了SLS中引起这种奇怪的部分,我会用SLS 6.23来回答(匿名函数)@luigipling更具体地说,arg列表不是expr,但f()
是。SLS似乎没有说明占位符为什么被挤在大括号中,所以你不能“hi”groupBy{u}
。块expr需要作为arg expr的特殊特许,所以这可能会让人困惑。