我对 Scala 很陌生,我遇到了一个问题。
我正在尝试编写一个包含函数队列的类。我希望能够将函数添加到队列中,并且在添加了所有函数后,运行这些函数。本质上构建一个表达式,例如:“function1(function2(function3()))”,然后返回然后进行评估。这是我到目前为止的代码:
class Pipeline() {
// Queue of functions to run
private var queue: Queue[ _ => _] = new LinkedList();
// Add functions to the queue
def addFunction(func:_ => _ ): Unit ={
queue.add(func)
}
// Run all the functions in the queue
def run(): Unit = {
val function = runHelper(queue.poll(), queue)
function
}
def runHelper(func: _ => _, queue: Queue[_ => _]): _ = {
// Recursion base case
if(queue.isEmpty)
return func
// Keep building the function recursively
else
func(runHelper(queue.poll(), queue))
}
}
我敢肯定,这里不止一个错误。但现在,我坚持的是 runHelper 函数的返回类型。如您所见,我正在尝试使用 _ 通配符,但这会产生编译错误。我将如何定义该函数将返回一个函数?我是否以一种好的方式来解决这个问题 - 如果不是,请指出我对问题的更合适解决方案的方向。
编辑1:澄清 函数的输入和返回类型事先不知道,它们的顺序需要可以动态分配。
Edit2:更多问题 我一直试图让 Edmondo1984 建议的代码按照我想要的方式工作,但我似乎无法得到它。
我需要做的是这样的:
val func1: String => File = function1
val func2: File => File = function2
var queue = func1
if(runFunc2)
queue = queue :: func2
queue("exampleString")
我特别需要知道的是如何能够执行“queue = queue :: func2”。由于 :: 返回一个 FunctionQueue,我会想象我可以将它分配给 queue 变量。但话又说回来,我猜是因为变量的第一次初始化导致它具有“String => File”需求。我觉得我在这里有点过头了,任何帮助都将不胜感激。