2012-02-24 2 views
5

たとえば、いくつかのフィールド値でオブジェクトをフィルタリングしたいとします。 私は==>それは私もそれが高速で動作します。この方法名前空間のポリシングなしでメソッドレベルの定数を作成する方法はありますか?

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

を書くことができます

遅くなりますと呼ばれるHashSetのたびにメソッドを作成します。その場合には

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

を書くことができますしかし私は無意味なオブジェクトsetで私の空間を汚染します。

これを行うにはどのような方法が最適ですか?

答えて

12

これは動作するようです:

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

あなたはこのようなデフに "セット(C1、C2)" を考慮する場合:

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

は1つだけがあることがわかりますセットが作成されました。

7

ちょうどそれを囲んで、名前空間はもはや汚染されていません。

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

内部で名前付きの関数を使用すると、コードを整理しやすくなり、名前空間をきれいに保つことができます。

def someMeaningfulName = { 
    val set = Set(c1,c2) 
    objects.filter{ o => 
    set contains o.field 
    } 
} 
関連する問題