2012-02-24 60 views
5

例如,我想通過一些字段值來過濾對象。 我可以寫有沒有辦法創建沒有命名空間監視的方法級別常量?

objects.filter{ o => 
    val set = Set(c1,c2) 
    set contains o.field 
} 
在這種情況下

我將創建的HashSet稱爲==>這將是緩慢的,每次方法

我也可以寫這樣

val set = Set(c1,c2) 
objects.filter{ o => 
    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)} 

你會看到只有一條設置創建。

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 
    } 
} 
相關問題