2010-05-10 10 views
5

Wie codieren Sie eine Funktion, die einen Codeblock als Parameter mit case-Anweisungen akzeptiert? Zum Beispiel möchte ich in meinem Codeblock keine Übereinstimmung oder einen Standardfall explizit ausführen. Ich suche so etwas wie diesesWie codierst du einen Mustervergleichscode in scala?

myApi { 
    case Whatever() => // code for case 1 
    case SomethingElse() => // code for case 2 
} 

Und Innenseite meiner MyApi(), es wird tatsächlich den Codeblock ausführen und tun die Spiele.

Antwort

6

Sie haben eine PartialFunction für diesen Einsatz.

+0

Danke! Ich wusste, dass es etwas komisches war, aber ich konnte kein Beispiel dafür finden. – egervari

+0

@egervari das gleiche Muster gilt auch für 'Function1'. Blöcke mit 'case'-Anweisungen sind Funktionsliterale und können für' PartialFunction' und 'Function1' stehen, je nachdem, welcher Typ erwartet wird. –

-1

Dies sollte ausreichen, um es zu erklären: A Tour of Scala: Pattern Matching

+0

Nein, ich weiß, wie man eine Übereinstimmung findet ... Ich möchte eine Funktion erstellen, die einen Code-Block einbezieht, der nur aus Case-Anweisungen besteht ... und dann diese Funktion intern verarbeiten lässt. Grundsätzlich haben wir für normale Codeblöcke einen Parameter mit (=> Einheit), aber für die Mustererkennung ist das anders. Ich möchte im Wesentlichen dasselbe für reguläre Codeblöcke, aber für Fallanweisungen. – egervari

Verwandte Themen