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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |