我有一个未知函数数量的类:
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)
我想避免硬编码,基本上......
答案 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方法获取的字符串来对它们进行排序