저는 스칼라에 대해 매우 익숙하며 문제가 발생했습니다.함수를 스칼라 함수의 반환 형식으로 할당하는 방법
함수 대기열을 보유 할 클래스를 작성하려고합니다. 큐에 함수를 추가하고 모든 함수가 추가되면이를 실행할 수 있기를 원합니다. 기본적으로 "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")
는 "큐 = 큐 :: FUNC2"을 할 수 있도록하는 방법입니다 : 내가해야 할 일은
은 다음과 같이 될 것이다. ::가 FunctionQueue를 반환하기 때문에 큐 변수에 할당 할 수있을 것이라고 상상했을 것입니다. 그러나 다시 한번, 변수의 첫 번째 초기화 이후 "String => File"요구가 발생합니다. 나는 내 머리 위로 조금이라도있는 것처럼 느껴진다. 그리고 어떤 도움이라도 대단히 감사 할 것이다.
사전에 알려진 함수 시퀀스가 동적으로 생성 되었습니까? 예전의 경우 얀의 대답은 갈 길입니다. –
시퀀스가 동적으로 생성됩니다. 그래서 지금 당장은 Edmondo1984 대답이 갈 길인 것 같아요. 그러나 나는 아직도 그것에 대해 내 마음을 감싸려고 노력하고있다. – Johan
이들은 기능이 있습니까? 즉, 입력 유형이 반환 유형과 같으므로 모든 함수가 동일한 유형을 공유합니까? –