有条件地使用类似构建器的函数

时间:2018-09-05 13:03:09

标签: scala functional-programming

假设这种情况:

我的Tuple大小为 n 。 每个元素都是一个Boolean标志,用于定义是否应在对象(此处为builder)上调用特定功能。

首先想到的语法是:

(el1, el2, el3, ...) => {
   val builder = MyBuilder()

   val builder1 = if(el1) builder.func1(...) else builder
   val builder2 = if(el2) builder1.func2(...) else builder1
   val builder3 = if(el3) builder2.func3(...) else builder2
   ...
}

最后一个生成器builderN将是所需的对象。但是这段代码很讨厌。

什么是好的,干净的选择? (注意:我正在使用cats。)

代表我的问题的另一种方式是:

val result = MyBuilder.
   .func1(...) //ONLY if el1!
   .func2(...) //ONLY if el2!
   .func3(...) //ONLY if el3!
   ....
   .funcn(...) //ONLY if el4!

编辑:固定示例代码!

1 个答案:

答案 0 :(得分:5)

您可以将标记列表与构建函数列表一起压缩,然后在折叠中有条件地应用构建器函数

func1
func3

打印到控制台:

{{1}}