2011-08-08 9 views
3

オブジェクトに一連の関数を適用するために、Scalaで正しい構文を理解しようとしています。オブジェクトに関数のセットを適用するための構文

class MiTestClass { 
    def isValid() : Bool = {...} 
    def isGreen() : Bool= {...} 
    def isYellow() : Bool = {...} 
} 

と私は

val conditions:List[MiTestClass => Boolean] = List(_.isGreen, _.isYellow) 

ように私のオブジェクトにメソッドのサブセットを適用すると、いくつかの操作を実行するためにインスタンスの言いたい新しいオブジェクトval miTestObj = new MiTestClassを作成します。私はクラスを持っていると言いますすべてのプロパティが保持されていることを確認してください

val result:Bool = resultOfApplyingFunctions.foldLeft(true)(and) 

このような機能を得るための構文は何ですか? Haskellでは、あなたは

map (\f -> f miTestObj) conditions 

のようなものを書きますが、私はScalaの構文を取得することはできません右

答えて

6
scala> val conditions: List[MiTestClass => Boolean] = List(_.isGreen, _.isYellow) 
conditions: List[(MiTestClass) => Boolean] = List(<function1>, <function1>) 

scala> val obj = new MiTestClass 
obj: MiTestClass = [email protected] 

scala> conditions.forall(_(obj)) 
res1: Boolean = false 

scala> conditions.forall(f => f(obj)) // slightly more verbose way 
res2: Boolean = false 
5
conditions.map(f => f(miTestObj)) 

または

conditions map (_(miTestObj)) 
関連する問題