Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala函数中使用case关键字?_Scala - Fatal编程技术网

如何在scala函数中使用case关键字?

如何在scala函数中使用case关键字?,scala,Scala,我对scala函数体中使用的case关键字感到困惑。 如何纠正下面的错误,以及此处的案例有何用途 val fun=(x:Int,y:Int)=>{case(a,b)=>a+b} 在您的情况下,案例完全没有必要。照办 valfun=(x:Int,y:Int)=>x+y case可以用于编写某种风格的匿名函数速记,前提是编译器已经知道它需要什么类型。例如,如果您试图构造一个匿名函数作为参数传递给其他函数(例如列表的映射),或者在将函数声明为val时给出了显式类型提示 //关于“fun

我对scala函数体中使用的
case
关键字感到困惑。
如何纠正下面的错误,以及此处的
案例有何用途

val fun=(x:Int,y:Int)=>{case(a,b)=>a+b}

在您的情况下,
案例
完全没有必要。照办

valfun=(x:Int,y:Int)=>x+y
case
可以用于编写某种风格的匿名函数速记,前提是编译器已经知道它需要什么类型。例如,如果您试图构造一个匿名函数作为参数传递给其他函数(例如列表的
映射
),或者在将函数声明为
val
时给出了显式类型提示

//关于“fun”应该是什么的显式类型提示
val fun:(Int,Int)=>Int={case(a,b)=>a+b}
乐趣(1,2)//返回3
//没有显式类型提示,编译器无法确定a和b是什么类型
valf={case(a,b)=>a+b}
^
错误:缺少扩展函数的参数类型
匿名函数的参数类型必须完全已知。(补充说明8.5)
所需类型为:?
//将函数作为参数传递,其中应为`(Int,Int)=>a`
val listOfTuples=列表(1->2,3->4,5->6)
listOfTuples.map{case(a,b)=>a+b}
//返回列表(3、7、11)
另一种理解它的方法是,它类似于对函数的参数进行
匹配
块的速记,例如

def addTupleParts(tup:(Int,Int))=tup匹配{
案例(a,b)=>a+b
}
map(addTupleParts)
listOfTuples.map{case(a,b)=>a+b}

为什么要使用
案例
?您已经有了这两个变量?这个答案是正确的,但要添加:
case
将启动模式匹配
case(a,b)
将匹配一个由两个元素组成的元组,而不是问题中函数的两个参数——如前所述,case需要一个元组参数。没错,尽管scala编译器似乎允许您在尝试使用
case
时,将具有两个参数的函数视为具有元组2的函数(尽管这可能取决于您使用的是哪个特定版本的
scalac
)您有一个示例来说明您的意思吗?我正在努力想出一个我的示例own@gregghz
valf:Function2[Int,Int,Int]={case(a,b)=>a*b}
很有趣——我刚刚验证了这一点,这确实适用于scala 2和scala 3。谢谢!