2012-02-24 2 views
5

Na przykład chcę filtrować obiekt według niektórych wartości pól. mogę napisaćCzy istnieją sposoby tworzenia stałych poziomu metod bez rozsyłania przestrzeni nazw?

objects.filter{ o => 
    val set = Set(c1,c2) 
    set contains o.field 
} 

w tej sprawie będę tworzyć Hashset każdą metodę czasową nazwie ==> to będzie powolny

ja też mogę pisać w ten sposób

val set = Set(c1,c2) 
objects.filter{ o => 
    set contains o.field 
} 

będzie działać szybko ale zanieczyszczam moją przestrzeń pozbawionym znaczenia obiektem set.

Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

12

To wydaje się działać:

objects.filter { 
    val set = Set(c1,c2) 
    o => set contains o.field 
} 

Jeśli będzie czynnik out "Set (C1, C2)" w def jak ten:

def getSet = { println("Set!"); Set(5,7)} 

będzie można zobaczyć, że jest tylko jeden zestaw utworzony.

7

Wystarczy umieścić szelki wokół niego, a przestrzeń nazw nie jest już zanieczyszczona.

{ 
    val set = Set(c1,c2) 
    objects.filter{ o => 
    set contains o.field 
    } 
} 
7

Użyj wewnętrznych nazwanych funkcji, pomagają lepiej ustrukturyzować kod i zachować czystość przestrzeni nazw.

def someMeaningfulName = { 
    val set = Set(c1,c2) 
    objects.filter{ o => 
    set contains o.field 
    } 
} 
Powiązane problemy