如何在scala函数中使用case关键字?
我对scala函数体中使用的如何在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
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@gregghzvalf:Function2[Int,Int,Int]={case(a,b)=>a*b}
很有趣——我刚刚验证了这一点,这确实适用于scala 2和scala 3。谢谢!