有没有办法对scala';使用foldLeft或任何其他列表方法的函数?

有没有办法对scala';使用foldLeft或任何其他列表方法的函数?,scala,Scala,我试图对函数列表进行排序,这些函数在一个伴随对象中定义: object solution { def methodA(l: List[String]): List[Int] = { l.map(_.toInt) } def methodB(l: List[Int]): List[Int] = { l.map(_ + 1) } def methodC(l: List[Int]): Long = { l.sum } def main(args: Array[String]): Un

我试图对函数列表进行排序,这些函数在一个伴随对象中定义:

object solution {

def methodA(l: List[String]): List[Int] = {
  l.map(_.toInt)
}

def methodB(l: List[Int]): List[Int] = {
  l.map(_ + 1)
}

def methodC(l: List[Int]): Long = {
  l.sum
}
def main(args: Array[String]): Unit = {
  val f1 = this.methodA _
  val f2 = this.methodB _
  val f3 = this.methodC _
  val fs = f1 andThen f2 andThen f3
  fs.apply(List("1", "2", "3"))
}
}
我想要的是这种款式:

def main(args: Array[String]): Unit = {
    val fs = List(f1, f2, f3)
    fs.foldLeft(someFunc).apply(List("1", "2", "3"))
}

只有当所有函数都具有相同类型时,才能执行此操作

  type A = String
  type B = String
  type C = String
  type D = String

  val f1: A => B = identity
  val f2: B => C = identity
  val f3: C => D = identity

  val ls: List[String => String] = List(f1, f2, f3)

  val aggregate: String => String = ls.reduceLeft(_ andThen _)

  aggregate.apply(...)

这是因为Scala编译器会将列表的类型推断为列表中所有值的超类型,对于单参数函数,它是
Nothing=>Any
,现在不能将
Nothing=>Any
的列表排序为一个组合函数,因为结尾和开头不匹配,它们所做的唯一情况是当参数和返回类型都相同时。

您能分享您想要发生的事情吗?
列表的每个元素(“1”、“2”、“3”)
分别是函数
f1、
f2`&
f3
的输入吗?或者您希望将列表本身作为所有函数的输入传递?或者您希望将列表作为
f1
的输出传递给
f2
,然后将其结果传递给
f3
?-顺便说一句,为什么输出是单位?(如果您共享每个函数的类型也会有所帮助)。问题是,由于每个函数都有不同的类型,因此不可能对许多函数以通用的方式执行此操作。我想如果你想要某种形式的折叠,是因为你有很多函数(不只是三个),你能控制这些函数吗?实际上,我只想实现管道模式,其中一个结果“流”到另一个输入:)Scala
2.13
有一个包,允许你编写类似
List(1,2,3)的东西管道f1管道f2管道f3
。如果您在
2.12
中,您可以复制并粘贴代码,这非常简单。