Scala:逐个执行函数并在它们之间传递参数

时间:2016-08-26 13:00:50

标签: scala

我有一个未知函数数量的类:

class processors {
  def p1(s: String): String = {
    //code
  }
  def p2(s: String): String = {
    //code
  }
  def p3(s: String): String = {
    //code
  }
  ...
}

我希望能够按照它们编写的顺序逐个运行所有函数(p1 - > p2 - > p3 - > ...)。另外,我想将初始字符串传递给p1,它将结果作为p2的参数传递并执行。有没有一种简单的方法可以做到这一点?

修改

到目前为止我所拥有的:

目前我有一个硬编码的序列:

val processors = Seq(p1 _, p2 _, p3 _).reduce(_ andThen _)
processors(some_string)

我想避免硬编码,基本上......

1 个答案:

答案 0 :(得分:2)

反思可以在这里提供帮助。这个例子是针对单个param整数参数的,但它可以扩展到多个参数,但处理类型有点棘手。可以从类中查询参数类型。

class A {
  def f(x: Int): Int = 2 * x
  def g(x: Int): Int = x * x
}

val clazz = classOf[A]

clazz.getDeclaredMethods.filter(! _.getName.contains("$"))
.map(x => {a: Integer => x.invoke(new A(), a: Integer).asInstanceOf[Integer] })
.reduce(_ andThen _)(new Integer(1))

对于您的情况,只需将Int替换为String

维持类

中函数的执行顺序

尝试将数字放在函数名中,然后通过解析从getName方法获取的字符串来对它们进行排序