私は 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 関数の戻り値の型です。ご覧のとおり、_ ワイルドカードを使用しようとしていますが、コンパイル エラーが発生します。関数が関数を返すことをどのように定義しますか? そして、私はこれについて良い方法で進んでいますか?そうでない場合は、問題のより適切な解決策の方向に私を向けてください.
edit1: 明確化 関数の入力と戻り値の型は事前に知られていないため、それらのシーケンスを動的に割り当てることができる必要があります。
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 を返すので、それをキュー変数に割り当てることができると想像していたでしょう。しかし、繰り返しになりますが、変数の最初の初期化により、「文字列 => ファイル」という要求が発生することになると思います。私はここで少し頭を悩ませているように感じます。どんな助けも大歓迎です。