有条件地在Scala中有条件地应用方法

时间:2019-09-04 18:09:23

标签: scala

是否有一种干净的方法有条件地应用一长串方法?我想做这样的事情。 (无论是否调用了method2,对象的类型都相同,因此method3仍然有效)

someObject
    .method1()
    if (some condition) {.method2()}
    .method3()

这将实现与以下相同的效果,但我想避免针对每种条件完全重写它,即

if (some condition){
    someObject
        .method1()
        .method2()
        .method3()
}
else {
    someObject
        .method1()
        .method3()
}

1 个答案:

答案 0 :(得分:4)

例如,尝试使用pipe链接运算符

import scala.util.chaining._

object SomeObject {
  def method1 = { println("method1"); this }
  def method2 = { println("method2"); this }
  def method3 = { println("method3"); this }
}

SomeObject
  .method1
  .pipe(someObject => if (condition) someObject.method2 else someObject)
  .method3

如果condition == false输出,

method1
method3

否则输出

method1
method2
method3