组成函数的模式

时间:2015-06-30 18:39:16

标签: scala scalaz

以下是一组虚构的case classes。实际上我们有类似的ADT。

case class Alphabet(a:Character)
case class Word(alphabets: List[Alphabet])
case class Sentence(words : List[Word])
case class Paragraph(sentences : List[Sentence])
case class Chapter(paras : List[Paragraph])

有服务API,如下所示。

def saveSentence(sentence : Sentence)

def saveParagraph(paragraph : Paragraph)

def saveChapter(chapter:Chapter)

有多种测试可以测试上述API。对saveChapter的测试将准备构建Chapter等所需的所有数据。

如果你想创建“可组合”的功能,比如说

val alphabests :List[Alphabet] = ...

generateWord(alphabests).compose生成Word,同样适用于其他数据。其中前一个函数的输出变为后续函数的输入,其中包含从上一步骤构建的必要数据,用于下一步骤。

在不依赖于测试框架的情况下,您将使用哪些模式来实现此类行为(在这种情况下为scalatest)

1 个答案:

答案 0 :(得分:0)

我不确定,如果我理解你的话,但是已经为scala函数提供了这个功能。

 object Main extends App {
      def f(x: Int): Int = x * 2
      def g(x: Int): Int = x + 1
      def h(x: Int): Int = x + 100
      val x = g _ compose f compose h
      val y = g _ andThen  f andThen  h

      println(x(5))
      println(y(5))
    }

此处 x y 是由函数组成的。只是不要将实际参数传递给 generateWord