将一组函数应用于对象的语法

ton*_*ian 3 scala

我试图在Scala中找出正确的语法,将一组函数应用于对象.说我有一节课:

class MiTestClass {
   def isValid() : Bool = {...}
   def isGreen() : Bool= {...}
   def isYellow() : Bool = {...}
}
Run Code Online (Sandbox Code Playgroud)

val miTestObj = new MiTestClass现在创建一个新对象我想将一个方法的子集应用到我的对象中

val conditions:List[MiTestClass => Boolean] = List(_.isGreen, _.isYellow)
Run Code Online (Sandbox Code Playgroud)

并执行某些操作,例如检查所有属性是否成立

val result:Bool  = resultOfApplyingFunctions.foldLeft(true)(and)
Run Code Online (Sandbox Code Playgroud)

获得此类功能的语法是什么?在Haskell中你会写出类似的东西

map (\f -> f miTestObj) conditions
Run Code Online (Sandbox Code Playgroud)

但我无法正确使用Scala语法

kas*_*ens 6

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

scala> val obj = new MiTestClass
obj: MiTestClass = MiTestClass@3dc049d

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

scala> conditions.forall(f => f(obj)) // slightly more verbose way
res2: Boolean = false
Run Code Online (Sandbox Code Playgroud)


Deb*_*ski 5

conditions.map(f => f(miTestObj))
Run Code Online (Sandbox Code Playgroud)

要么

conditions map (_(miTestObj))
Run Code Online (Sandbox Code Playgroud)