Wie setze ich Methoden in Mengen?

8
%Vor%

set.size ist jetzt 2, und set.contains(m) ist falsch, weil scheinbar m teilweise zweimal angewendet wird und zwei Funktionsobjekte erstellt werden. Wenn m eine Funktion ist, funktioniert es wie erwartet. Ich möchte die Funktionen als gleich behandeln, wenn sie die gleiche Methode referenzieren. Kann das gemacht werden? (ohne zu Maps mit Schlüssel zurückzukehren, um sie zu entfernen oder andere Zwischenvariablen zu übergeben)

    
takoi 04.07.2011, 11:46
quelle

2 Antworten

9

Verwenden Sie val fun = m _ , um die Methode vor dem Hinzufügen in eine Funktion umzuwandeln.

Doing set += m erstellt implizit eine neue Funktion, die nicht der Funktion entspricht, die erstellt wird, wenn set.contains(m) ausgeführt wird, z. Beide Verwendungen von m in einem Funktionskontext erzeugen ein völlig neues und damit anderes Funktionsobjekt. (Sorry, ich habe gerade gesehen, das hast du schon gesagt.)

Das ist in Ordnung, wenn Sie nur die Methoden irgendwie in das Set bekommen und dann das Set für alle Verweise verwenden müssen. Folgendes funktioniert also auch:

%Vor%

Zusatz :

  

oder Weitergabe anderer Zwischenvariablen

In Scala gibt es kein Methodenobjekt. Ich denke also nicht, dass es möglich ist, zwei Methoden zu vergleichen, es sei denn, Sie vergleichen ihren Namen. (Kann durch Reflektion möglich sein, aber ich bin mir nicht sicher, und es wäre auch ziemlich scheußlich, dies zu tun - Sie hätten dann keine Funktionen, sondern Methodenreferenzen, die Sie in geeignete Methoden umwandeln müssten und wieder zurück.)

    
Debilski 04.07.2011, 12:16
quelle
1

Sie können die Methode in ein Lambda mit derselben Signatur einfügen:

%Vor%     
paradigmatic 04.07.2011 12:08
quelle

Tags und Links