为什么必须要这个`case`?

Fre*_*ind 4 scala case

object Test1 {
    def main(args: Array[String]) {
        val list = List("a", "b")
        list map { x ? println(x) }
        list map { case x ? println(x) }

        val list2 = List(("aa", "11"))
        list2 map {
            case (key, value) ? println("key: "+key+", value: "+value)
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

请注意最后一行,为什么case必须使用关键字,但list map { x ? println(x) }可以删除它吗?

tho*_*dge 14

你无法打破功能文字中的元组.这就是为什么你必须用case来匹配它们.另一种方法是使用tupled使你的函数适合两个参数:

import Function.tupled 
list2 map tupled {
  (key, value) => println("key: "+key+", value: "+value)
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 9

{ case (key, value) => f }
Run Code Online (Sandbox Code Playgroud)

与...不是一回事

{ (key, value) => f }
Run Code Online (Sandbox Code Playgroud)

第一种是模式匹配,它将a Tuple2分解为其组件,将其值分配给keyvalue.在这种情况下,只传递一个参数(元组).{ x => println(x) }因为x分配了元组并println打印它而起作用.

第二个是一个函数,它接受两个参数,并且不进行模式匹配.由于map需要一个采用单个参数的函数,因此第二种情况不兼容map.