加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中方法,功能和部分应用功能的功能组合

发布时间:2020-12-16 09:21:34 所属栏目:安全 来源:网络整理
导读:与Stack Overflow问题 Compose and andThen methods有点类似,我一直在通过Twitter的 Scala School教程进行工作,很快就遇到了一个评论者遇到的问题(这是很好的,因为我睡觉,认为我的问题解决了). 在本教程中,它定义了两种方法: def addUmm(x: String) = x + "
与Stack Overflow问题 Compose and andThen methods有点类似,我一直在通过Twitter的 Scala School教程进行工作,很快就遇到了一个评论者遇到的问题(这是很好的,因为我睡觉,认为我的问题解决了).

在本教程中,它定义了两种方法:

def addUmm(x: String) = x + " umm"
def addAhem(x: String) = x + " ahem"

而在较新的Scala版本中,您不能像这样调用它们:addUmm(_).compose(addAhem(_)),接受的答案(和其他一些答案似乎取决于addUmm并且addAhem是方法,而不是函数,这在尝试调用compose时会产生一个问题.我已经满足了,已成功运行:

scala> ((s: String) => s + " umm").compose((s: String) => s + " ahem")
res0: String => java.lang.String = <function1>

凉.问题是,虽然不能组合方法有一些意义,当我同样的事情与值我知道评估到Function1:

val a = (s: String) => s + " umm"
val b = (s: String) => s + " ahem"
val c = a(_).compose(b(_))

那最后一行咳嗽了原来问题所做的错误,即使这次是部分功能应用程序,而不是方法.原始问题(高排名,但不是公认的答案)的答案似乎暗示它与部分应用程序的扩展有什么关系,解释是什么?

对于Scala新手,事实上,如果您明确指定_:String两个地方,但是a.compose(b)确实有点混乱,则该参与者会得到(_).compose(b(_))错误.

解决方法

a(_).compose(b(_))扩展为x => {a(x).compose(y => b(y)}因此错误,你想要的是(x => a(x)).compose(y => b(y)一对括号修正了这一点.

scala> (a(_)).compose(b(_: String))
res56: String => java.lang.String = <function1>

scala> res56("hello")
res57: java.lang.String = helloahemumm

但是,由于a和b是函数,所以你可以避免所有这些问题,并且只需要做一个组合b.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读