问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Scala 中的case关键字在这里是什么意思

发布网友 发布时间:2022-05-12 06:58

我来回答

1个回答

热心网友 时间:2024-02-19 04:58

(1 to 10) map { case x => 2*x }

中的{ case x => 2*x } 得到的是一个PartialFunction 。然而,事实并非如此。

简单说,凡是Scala中出现如下表达式时:

{ case p1 => e1; case p2 => e2; ...; case pn => en }

其结果为Scala中的匿名函数(Anonymous Function) ,但是其具体类型是根据其所处位置而定,可能是一个FunctionN,也可能是一个PartialFunction (这里的FunctionN指的是非PartialFunction的Function)。

下面用一段小代码证明之:

scala> def needfunc[F](f: F) = fneedfunc: [F](f: F)Fscala> needfunc[PartialFunction[Int, Int]]({ case x => 2*x }).getClass.getSuperclasswarning: there was one feature warning; re-run with -feature for detailsres0: Class[?0] forSome { type ?0 >: ?0; type ?0 <: PartialFunction[Int,Int] } = class scala.runtime.AbstractPartialFunction$mcII$spscala> needfunc[Int => Int]({ case x => 2*x }).getClass.getSuperclasswarning: there was one feature warning; re-run with -feature for detailsres1: Class[?0] forSome { type ?0 >: ?0; type ?0 <: Int => Int } = class scala.runtime.AbstractFunction1$mcII$sp

上面的结果表明,当我需要一个Function(非PartialFunction)时,我得到的就是一个非PartialFunction的Function;当我需要一个PartialFunction时,得到就是PartialFunction。

当然,我不是仅有上面的例子就下结论。实际上,《Scala语言规范》(Scala Language Specification)对此有具体规定,引用如下:Pattern Matching

Pattern Matching Anonymous Functions
BlockExpr ::= `{' CaseClauses `}'

An anonymous function can be defined by a sequence of cases

{ case p1 => b1; …… case pn => bn }

which appear as an expression without a prior match. The expected type of such an expression must in part be defined. It must be either scala.Functionkk[S1,…,Sk, R] for some k>0, or scala.PartialFunction[S1, R], where the argument type(s) S1,…,Sk must be fully determined, but the result type R may be undetermined.

为啥需要搞清什么时候是PartialFunction而什么时候是FunctionN呢,这里涉及另一个问题:PartialFunction在某些时候相对FunctionN会存在性能问题!
这是另一个有趣的问题了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 楼梯的水泥台阶上可以铺地板革吗 手机腾讯会议共享屏幕播放视频没声 腾讯会议共享屏幕没声音怎么办 scala spark中定义trait是什么意思 scala的小于和冒号在一起是啥意思 scala 抽象类和trait的区别 scala中s代表什么? scala程序中implements是什么意思 scala中x.xxx()()什么意思,就比如说下面这段两个小括号接在一起什么意思 scala transient 是什么意思 scala的单例对象是什么意思 scala 下划线什么意思 东方斯卡拉是什么意思 scala顶层包package 问什么要用com.scala是什么意思 Scala的所有符号运算符是什么意思 scala 中的,是什么意思 scala 这段语法是什么意思 幻想游戏中关于坦克的游戏 oppoA1的音乐设置在哪,怎么设置让手机自动切换音乐 为什么手机放歌放一会就自动换下一曲。上一首还没放完。。 我手机才买的蓝牙耳机也是才买的就是一直自动换歌怎么回事是红米不能连吗我朋友也是这样怎么回事? 手机摇晃自动切换歌曲怎么回事?? vivo手机里歌曲还没播完就自动切换到下一曲是怎么回事?有时候会一下切换好几个个? 15岁了,腿是X型的,怎样使变直 您好!我的大腿两根骨头往外翻,凸出的很明显,小腿又很弯,能纠正吗?请您帮忙下 腿很不直怎么办,膝盖很突出,我穿牛仔裤那些就是膝盖突出,小腿向后弯的,感觉膝盖和小腿没有连接上一样 我的膝盖稍微向前突出,小腿向后弯曲,正面侧面看都比较弯曲,应该做什么姿势的运动进行矫正呢 小腿向后弯,膝盖比较突出,腿型很不直,该怎么办? 膝盖走路总是弯的,平时稍微抬下腿也是这样,腿不疼,但是侧面看就是大腿骨向前小腿向后,以前不是这样的 我19岁,现在发现小腿向后弯曲(腿完全伸展的时候),要怎么矫正? 从侧面看 小腿上部 向后弯曲 还有点罗圈腿 可以通过某些运动矫正吗 膝盖突出小腿后弯,怎么矫正 小腿向后弯曲怎么办我的腿挺瘦的 就是有 有什么办法可以矫正腿型吗???之前一直跷二郎腿,现在腿型变得很弯,从侧面看大腿和小腿不在一条直线上 小腿向后弯曲 中午吃馒头还是米饭好? 单立人加一个刃是什么字 谁有司马相如的子虚赋还有上林赋的语言版啊,急!!!求大神帮助 一般顾客问产品质量怎么样该怎么回答 客户问我质量怎样的时候,怎样回答的方式最好 馒头营养还是米饭营养? 如果买家问是你的产品质量好还是别人家的产品质量好怎么回答 上林赋可以打印几张A四纸