użytkowania val fun = m _
przekształcić sposobem w funkcja przed dodaniem.
Wykonanie set += m
niejawnie tworzy nową funkcję, która nie jest równa funkcji utworzonej podczas wykonywania set.contains(m)
, np. oba zastosowania m
w kontekście funkcji tworzą całkowicie nowy, a tym samym inny obiekt funkcji. (Przepraszam, właśnie zobaczyłem, już to powiedziałeś.)
To jest w porządku, jeśli potrzebujesz tylko dostać metody do zestawu jakoś, a następnie użyj zestawu dla wszystkich odniesień. Więc następujące prace, a także:
def m(x: Int): Any = { }
var set = new HashSet[Int => Any]
set += m
val fun = set.head // should not use head in real code but an iterator
set.contains(fun)
Dodatek:
lub przechodzące wokół innych zmiennych pośrednich
Nie ma czegoś takiego jak metoda obiektu w Scala. Nie sądzę, że możliwe jest porównanie dwóch metod, chyba że porówna się ich nazwę. (Być może będzie to możliwe za pomocą refleksji, ale nie jestem do końca pewny i byłoby to całkiem nieprzyjemne - nie miałbyś zestawu funkcji, a jedynie referencji metod, które musiałbyś zmienić na odpowiednie metody i ponownie.)