Wie bekomme ich die Domäne einer Teilfunktion in Scala?

8

Ist es möglich, die Domäne einer Teilfunktion in Scala zu erhalten?

Beispiel:

%Vor%

Gibt es eine Möglichkeit, etwas wie:

zu bekommen %Vor%

was würden Werte 1 und 2 anzeigen?

Update : Ich versuche ein Benachrichtigungssystem (Event-Bus) aufzubauen. Der Abonnent sieht so aus:

%Vor%

In meinem NoticationService (dem Event-Dispatcher) möchte ich auf die Ereignisse zugreifen, die in jedem Block "Benachrichtigungen" deklariert sind, damit ich die Benachrichtigungen an die Abonnenten weitergeben kann. Wie kann ich das tun?

Vielen Dank im Voraus.

    
d4rkang3l 04.03.2012, 21:14
quelle

3 Antworten

11

Wenn Sie eine Sammlung haben und wissen möchten, welche Elemente auch zur Domäne von f gehören, können Sie filter und isDefinedAt so verwenden:

%Vor%

Dies überprüft einfach erschöpfend. Ich weiß nicht, ob es einen besseren Weg gibt.

    
Dan Burton 04.03.2012 22:00
quelle
4

Es ist inhärent unmöglich, da eine Teilfunktion für jede Teilmenge des Eingabebereichs definiert werden kann; der Eingabebereich selbst darf nicht endlich sein, in diesem Fall wäre die Domäne auch nicht notwendigerweise endlich. Sie können die Domain nur über eine erschöpfende Übereinstimmung erhalten (nach Dans Antwort), aber Sie können nicht erschöpfend nach einem unendlichen Eingabefeld suchen.

    
Tomer Gabel 05.03.2012 10:36
quelle
0

Entschuldigung für die sechsjährige Verzögerung.

Ich glaube nicht, dass dieses Problem mit einer Karte gelöst werden kann. Die Benachrichtigungen haben folgende Form:

%Vor%

beinhaltet ein Muster, das ein variables Datum enthält, dessen Wert zur Kompilierzeit unbekannt ist: Es wird gebunden, wenn das Muster während der Ausführung übereinstimmt.

Sie wollen eigentlich keine Liste (oder Menge) von Domain-Werten. Sie wollen das Muster kennen, wie ich es sehe.

Ich bin auch auf dieses Problem gestoßen, und obwohl es vielleicht kein allgemeines Problem ist, stimmte es der Rolle der Reflexion in Scala zu: der Fähigkeit, den Code innerhalb des Programms zu untersuchen. Es handelt sich um die Unterscheidung zwischen flachen und tiefen internen DSLs. Das obige DSL ist flach, was dieses Problem verursacht, dass der Code nicht analysiert werden kann.

    
Klaus Havelund 22.03.2018 18:37
quelle

Tags und Links