gpt4 book ai didi

scala - 在Scala中提升功能值的方法

转载 作者:行者123 更新时间:2023-12-04 05:15:00 25 4
gpt4 key购买 nike

Scala库是否支持将给定类型的方法提升为函数值?

例如,假设我要提升String.length。我会写

val f: String => Int = _.length

或者
val f = { s: String => s.length }

但是,这种语法并不总是理想的(尤其是在较大的表达式中间)。我想我正在寻找可以启用类似表达式的东西
Lift[String](_.length)
Lift[Option[Int]].lift(_.filter)

我想到的是这样的:
class Lift[T] {                                                          
def apply[R](f: T => R): T => R = f

def lift[A, R](f: (T) => (A) => R): (T, A) => R =
f(_)(_)
def lift[A1, A2, R](f: (T) => (A1, A2) => R): (T, A1, A2) => R =
f(_)(_,_)
// ... etc. ...
}
object Lift {
def apply[T] = new Lift[T]
}

问题1:标准库(或任何库)是否提供类似的内容?

问题2:如果不是,是否可以通过如上所述的方式提升 Option.filter(而不是 Lift[Option[Int]].lift[Int => Boolean, Option[Int]](_.filter))来编写它?如果不提供 lift方法的类型参数,则会出现以下错误:

错误:缺少扩展功能的参数类型((x $ 1)=> x $ 1.filter)
Lift [Option [Int]]。lift(_。filter)
^

更新:

显然,我遇到的问题与重载的 lift方法有关。如果重命名重载,则可以在没有所有其他类型参数的情况下提升 Option.filter

最佳答案

有什么问题

(_: String).length
(_: Option[Int]).filter _

关于scala - 在Scala中提升功能值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4160239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com